我们有一个以nettcp模式托管的WCF服务和WCF客户端库,服务和客户端都是使用.net框架创建的。
现在我们正在使用Asp.net core 2.1创建新的应用程序,仍然需要在这里使用相同的旧WCF客户端库使用上面创建的WCF服务。
将此WCFClient库参考(.net框架)添加到我们的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 Core应用程序的服务-> WCF客户端库(.net框架)-> WCF服务nettcp(.net框架)
在进一步研究了自动生成的代理代码之后,发现在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);
}
}