У нас есть служба 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);
}
}