OPC UA .net стандартное переподключение - PullRequest
0 голосов
/ 10 января 2019

Я работаю над клиентом opc, используя стандартный стек .net из фонда opc. Кажется, все работает как ожидалось. Я могу установить сеанс, добавить подписки, элементы, получать уведомления при изменении данных ...

У меня проблема в том, что я не могу найти событие в сеансе, которое срабатывает, когда сеанс закрывается со стороны сервера.

Я тестирую с Kepserver EX 6. Когда я повторно инициализирую или отключаю среду выполнения на сервере, мое событие SessionClosing не запускается, поэтому я предположил, что Сервер не уведомляет клиента. Я не знаю, сработает ли он после тайм-аута или что-то еще?

После этого мой объект Opc.Ua.Client.Session в клиентском коде все еще показывает свойство Connected как true. Только когда я пытаюсь сделать что-то вроде добавления новой подписки, я получаю исключение Bad session.

Я мог бы поймать исключение и восстановить новую сессию или попытаться исправить текущую, но я бы предпочел знать, что сессия испортилась заранее. Я даже не знаю, возможно ли это.

Спасибо.

wrapped.Create

1 Ответ

0 голосов
/ 11 января 2019

Это конфиг. Наверное, я выбрал это из примера:

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:

Session.Create(config, new ConfiguredEndpoint(null, selectedEndpoint, EndpointConfiguration.Create(config)), false, "", 60000, credentials, null) Кажется, 60000 указано дважды.

...