OPC UA .net标准重新连接

时间:2019-01-10 17:24:37

标签: .net opc-ua

我正在使用来自opc基金会的.net标准堆栈在opc客户端上工作。 一切似乎都按预期进行。我可以建立会话,添加订阅,项目,并在数据更改时获得通知...

我遇到的问题是,在会话中,从服务器端关闭会话时无法触发该事件。

我正在用Kepserver EX 6进行测试。当我重新初始化或关闭服务器中的运行时时,我的SessionClosing事件没有触发,因此我认为服务器未在通知客户端。我不知道超时后是否会触发?

此后,客户端代码中的Opc.Ua.Client.Session对象仍然将Connected属性显示为true。 仅当我尝试执行添加新订阅之类的操作时,我才会获得Bad Session异常。

我可以捕获异常并重新建立一个新的Session或尝试修复当前的Session,但是我宁愿知道Session之前已经变坏了。我什至不知道这是否可能。

谢谢。

包装。创建

1 个答案:

答案 0 :(得分:0)

这是配置。我想我一定是从一个例子中摘下来的:

var config = new ApplicationConfiguration() { ApplicationName = AppName, ApplicationUri = Utils.Format($@"urn:{0}:{AppName}", System.Net.Dns.GetHostName()), ApplicationType = ApplicationType.Client, SecurityConfiguration = new SecurityConfiguration { ApplicationCertificate = new CertificateIdentifier { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = Utils.Format(@"CN={0}, DC={1}", "MyHomework", System.Net.Dns.GetHostName()) }, TrustedIssuerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities" }, TrustedPeerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications" }, RejectedCertificateStore = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates" }, AutoAcceptUntrustedCertificates = true, AddAppCertToTrustedStore = true, RejectSHA1SignedCertificates = false, MinimumCertificateKeySize = 1024 }, TransportConfigurations = new TransportConfigurationCollection(), TransportQuotas = new TransportQuotas { OperationTimeout = 15000 }, ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }, TraceConfiguration = new TraceConfiguration() }

然后我在Session构造函数中使用config对象:

Session.Create(config, new ConfiguredEndpoint(null, selectedEndpoint, EndpointConfiguration.Create(config)), false, "", 60000, credentials, null) 似乎两次指定了60000。