SAP NCo 3多线程使用,RfcConfigParameters中的User属性为零

2020-09-20 22:34发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我可能没有正确使用Begin.C...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我可能没有正确使用Begin.Context/EndContext,因为我有使用目标混合的并发线程(包括使用同一目标的多个线程),每个线程都没有对我认为是其私有状态连接的并发同步操作

麻烦的第一个征兆是,几次成功调用之后,RfcConfigParameters中的User属性变为零。 如果线程在它获得的RfcDestination实例上再次调用,则会出现"重复登录"失败异常,因为用户名不再正确。

我不知道为什么用户名会用零标记,我想知道SecureString或类似的实现是否掌握了所提供的凭据,使字节数组支持该字符串并一旦用完就用零标记在字符串上 泄露敏感信息。 但是,总的来说,密码仍然存在,只是用户属性为零。

我试图通过在每次使用RfcDestination之前检查RfcDestination Parameters属性来解决此问题,如果它们与我提供的值不匹配(并且仍具有副本),我将发出配置更改通知 我向变更事件支持注册了目标配置单例。 在Rfc配置事件参数中,我提供了changed类型,并在changedParameters中包含了USER和NAME。 对于触发它的线程,我从NCo获取了一个新的RfcDestination,在该处,我确实看到Parameters的User属性返回了实际的用户名,而不是零。 但是,对于其他线程,在检查之后正在调用其RfcDestination的引用时,它们会收到RCo的NCo异常,目标已关闭-例如无法获取SystemAttributes-。

在《 NCo 3编程指南》中提到了在多线程环境中使用NCo的示例。 我在哪里可以找到/下载此样本? 是否有关于多线程和NCo的最佳实践/准则的文章?

1条回答
callcenter油条
2020-09-20 22:55

对此进行了一些更新:

  1. RfcConfigParameters中的用户名来自WCF通道客户端凭据对象,一旦关闭该通道,WCF会将用户名清零。 用用户名的字符进行字符复制避免了RfcConfigParameters在字符串上具有引用的后备数组将为零。
  2. 似乎在删除类型的目标更改事件之后跟随类型更改的目标更改事件几秒钟之后,即用户断开连接后立即重新连接,Rfc目标保持关闭状态,从而对返回的目标的请求将失败 。 我加了一秒钟的等待-没有帮助-然后五秒钟,问题消失了。 但是,这不是一个很好的解决方案,因为我宁愿具有确定性的行为,即一旦发出更改事件,Rfc目标就可以立即再次可用,或者NCo有某种方式让呼叫者等待直到目标被恢复,所以我们不 不会引发意外异常。

一周热门 更多>