提问人:Jagankumar 提问时间:1/15/2019 最后编辑:Uwe KeimJagankumar 更新时间:1/15/2019 访问量:800
使用 WCF 客户端库从 Asp.net 核心使用 WCF 服务 (nettcp)
Consuming WCF Service (nettcp) from Asp.net core using WCF client library
问:
我们有一个以 nettcp 模式和 WCF 客户端库托管的 WCF 服务,服务和客户端都是使用 .net 框架创建的。
现在我们正在使用 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);
}
}
答: 暂无答案
评论