C# OPC-UA已关闭

C# OPC-UA已关闭,c#,security,opc,opc-ua,C#,Security,Opc,Opc Ua,我有两个windows服务,一个服务(service1)连接到两个OPC-UA服务器,工作正常。另一个windows服务(service2)使用OPC-UA基金会.NET参考堆栈中相同的连接代码连接到相同的两个OPC-UA服务器 Service1可以连接到两个OPC-UA服务器,并成功轮询数据。在部署Service2期间,Service2还可以连接和读取两台OPC-UA服务器的值。在这一点上一切都很好 但是,现在过了一段时间,没有对任何代码做任何更改。执行会话时,Service2无法再连接到其中

我有两个windows服务,一个服务(service1)连接到两个OPC-UA服务器,工作正常。另一个windows服务(service2)使用OPC-UA基金会.NET参考堆栈中相同的连接代码连接到相同的两个OPC-UA服务器

Service1可以连接到两个OPC-UA服务器,并成功轮询数据。在部署Service2期间,Service2还可以连接和读取两台OPC-UA服务器的值。在这一点上一切都很好

但是,现在过了一段时间,没有对任何代码做任何更改。执行会话时,Service2无法再连接到其中一个OPC-UA服务器。创建它只需使用ServiceResultException BadSecureChannelClosed(2156265472)进行回复即可

开始故障排除:在我们的客户站点上,我们还有一个测试服务器,它在生产环境中运行相同的设置,这意味着Service1和Service2也在测试服务器上运行,并以相同的方式与这两个OPC-UA服务器通信

我注意到,当我关闭测试服务器上的服务时,Service2的BadSecureChannelClosed错误消失(但是Service2仍然可以与两个OPC-UA服务器中的另一个进行通信)。使生产服务器上的一切按预期工作

这让我想知道OPC-UA服务器上的会话和连接有哪些限制。OPC-UA服务器为SINUMERIK 840d型。我曾询问西门子是否可以激活ServerDiagnostics对象来解决会话量等问题,但他们回答说这是不可能的。我认为这个对象是必须能够启用的

有没有人能给我一些提示,说明是什么原因导致了这种情况,以及在建立联系时我应该考虑哪些限制和事项,例如,什么是独一无二的?应用程序名?会话名?等等。是什么导致了这种看似“随机”的错误。请注意,我在Create会话调用中使用updateBeforeConnect=true。我使用带有硬编码用户名和密码的UserIdentity

另一个wierd症状是,对于使用BadSecureChannelClosed进行回复的OPC-UA服务器,当使用UaExpert连接到该服务器时,会出现发现错误(几周前不存在的错误):

16:58:41.806 |自动更新|检索当前版本信息时出错:找不到Host updates.unified-automation.com

16:58:35.404 | DiscoveryWidget | opc上的Discovery GetEndpoints。tcp://192.168.0.200:4840 失败(通讯错误)


16:58:35.401 | DiscoveryWidget | opc上的Discovery FindServer。tcp://192.168.0.200:4840 失败(BadCommunicationError)

当前的Sinumerik OPC UA服务器有缺陷,无法提供正确编码的扩展对象。一旦服务器可用,您需要向西门子请求更新服务器

请注意,您可以使用UaExpert访问它,UaExpert可以解码编码错误的extesionObject。这使得他们能够首先发布这样一个有缺陷的版本


编辑:关于ExtensionObjects的注意:如果您试图将其作为完整的结构来读取,则服务器状态将作为ExtensionObject传输。PublishResponse(用于提供订阅数据)还包括编码为ExtensionObject的数据更改。因此,如果您仅通过ServerState监视状态,它可能会工作。但无论如何,订阅都不会起作用。

谢谢您的回复。关于ExtensionObjects,即使我可以读取ServerDiagnostics对象,也无法启用它以查看数据。您知道我是否需要进行任何其他配置以启用ServerDiagnostics吗?如果没有,我如何才能看到我连接了多少会话等。当我尝试将enabledFlag写为true时,它只是说它不可写,请参见图:服务器不需要支持启用诊断。我添加了一个关于ExtensionObject的注释,这进一步解释了问题。感谢您的回答,致以最良好的祝愿!