Использование службы WCF (nettcp) из ядра Asp.net с использованием клиентской библиотеки WCF - PullRequest
0 голосов
/ 15 января 2019

У нас есть служба WCF, размещенная в режиме nettcp, и клиентская библиотека WCF, и службы, и клиент были созданы с использованием .net framework.

Теперь мы создаем новое приложение, используя ядро ​​Asp.net 2.1, но здесь нам нужно использовать созданную выше службу WCF, используя ту же старую клиентскую библиотеку WCF.

Добавил эту ссылку на библиотеку WCFClient (.net framework) в наше основное приложение Asp.net. Здесь я использую прокси конструктор ниже, чтобы передать мои конечные данные.

public LoggingServiceProxy(Binding binding, EndpointAddress remoteAddress)
            : base(binding, remoteAddress)

new LoggingServiceProxy(new EndpointAddress("net.tcp://localhost:9100/LoggingService/Tcp"), new NetTcpBinding(SecurityMode.None));

После добавления ссылок System.ServiceModel.NetTcp и System.ServiceModel.Primitives NUGET устранены все остальные ошибки. Но поток кода прерывается внезапно, когда он выполняет код прокси

((ICommunicationObject)this.channel).Open();

Больше информации нет, отладочное сообщение доступно после этого момента. Никаких исключений. Так что мы понятия не имеем, что это?

Примечание. Когда я прекращаю тестирование службы, у меня появляется исключение "EndPointNotFound".

Ожидаемое поведение - возможность использовать службу из основного приложения Asp.net -> Клиентская библиотека WCF (.net framework) -> Служба WCF nettcp (.net framework)

После того, как больше покопался в автоматически сгенерированном прокси-коде, обнаружил, что эта проблема возникает в случае InnerChannel_Opened () и InnerChannel_Closed () Вышеуказанное событие получило следующую строку кода «lock (this.channelLock)», которая вызывает проблему. Не исключение поднято. просто нить прервана / вышла. Когда они комментируют эти события, все работает нормально, но я не уверен, что можно комментировать этот автоматически сгенерированный код.

               lock (this.channelLock)
                {
                    if (this.IsDisposed)
                    {
                        throw new InvalidOperationException("Cannot use disposed object.");
                    }

                    if (this.Opened != null)
                    {
                        this.Opened(sender, e);
                    }
                }
...