Стандартное переподключение OPC UA .net

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

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

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

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

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

Спасибо.

wrapped.Create


person Joseph Herraez    schedule 10.01.2019    source источник
comment
Это странно, потому что вся идея состоит в том, чтобы работать активным образом - какой тайм-аут сеанса вы используете. Как установить событие keep alive?   -  person astrowalker    schedule 11.01.2019


Ответы (1)


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

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.Create(config, new ConfiguredEndpoint(null, selectedEndpoint, EndpointConfiguration.Create(config)), false, "", 60000, credentials, null) Похоже, что 60000 указано дважды.

person Joseph Herraez    schedule 11.01.2019