使用WCF客户端库从Asp.net核心消费WCF服务(nettcp)

时间:2019-01-15 10:32:30

标签: c# .net asp.net-core wcf-client

我们有一个以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);
                    }
                }

0 个答案:

没有答案