我正在使用来自opc基金会的.net标准堆栈在opc客户端上工作。 一切似乎都按预期进行。我可以建立会话,添加订阅,项目,并在数据更改时获得通知...
我遇到的问题是,在会话中,从服务器端关闭会话时无法触发该事件。
我正在用Kepserver EX 6进行测试。当我重新初始化或关闭服务器中的运行时时,我的SessionClosing事件没有触发,因此我认为服务器未在通知客户端。我不知道超时后是否会触发?
此后,客户端代码中的Opc.Ua.Client.Session对象仍然将Connected属性显示为true。 仅当我尝试执行添加新订阅之类的操作时,我才会获得Bad Session异常。
我可以捕获异常并重新建立一个新的Session或尝试修复当前的Session,但是我宁愿知道Session之前已经变坏了。我什至不知道这是否可能。
谢谢。
包装。创建
答案 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。