Jag*_*mar 5 .net c# wcf-client asp.net-core
我们有一个以 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));
Run Code Online (Sandbox Code Playgroud)
添加 System.ServiceModel.NetTcp 和 System.ServiceModel.Primitives NUGET 引用后,解决了所有其他错误。但是代码线程在执行代理代码时突然中止
((ICommunicationObject)this.channel).Open();
Run Code Online (Sandbox Code Playgroud)
此后没有更多信息,调试消息可用。没有引发异常。所以我们不知道它是什么?
注意:当我停止服务进行测试时,我清楚地收到异常“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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |