0

我有一个托管在控制台进程中的 wcf 服务。服务端点的创建是通过代码在 program.cs 文件中使用 net tcp 绑定完成的。

客户端创建通道是通过代码完成的。

此设置在本地主机中运行良好。但是,如果我将服务托管在其他机器上,并且尝试从其他机器连接到服务(客户端 IP 地址已更新),则会出现以下错误。

System.ServiceModel.EndpointNotFoundException:无法连接到 net.tcp://10.10.1.1:8232/Service/。连接尝试持续了 00:00:00 的时间跨度。TCP 错误代码 10061:无法建立连接,因为目标机器主动拒绝它 10.10.1.1:8232。---> System.Net.Sockets.SocketException: 无法建立连接,因为目标机器主动拒绝它 10.10.1.1:8232

注意: 其他场景 => 服务和客户端在同一台机器上运行。

在服务主机中添加服务端点 URL 地址为 127.0.0.1。

有了这个在客户端,如果我指定同一台机器的 IP 地址,它就无法连接到服务。

但是,如果我在服务端点配置中指定localhost而不是 127.0.0.1,我可以成功连接到服务。

我不确定为什么它不能与 127.0.0.1 一起使用,但可以与同一台机器上的本地主机一起使用。这是预期的吗?

即使在本地主机更改后,我也无法连接到其他机器中存在的服务。

欢迎任何建议。

端口未被防火墙阻止。

** 通过代码配置服务器端 **,

var tcpBinding = new NetTcpBinding(SecurityMode.None)
        {
            MaxBufferPoolSize = int.MaxValue,
            MaxBufferSize = int.MaxValue,
            MaxReceivedMessageSize = int.MaxValue,
            ReaderQuotas =
            {
                MaxArrayLength = int.MaxValue,
                MaxNameTableCharCount = int.MaxValue,
                MaxStringContentLength = int.MaxValue,
                MaxDepth = int.MaxValue,
                MaxBytesPerRead = int.MaxValue
            },
            ReceiveTimeout = TimeSpan.MaxValue
        };

var host = new ServiceHost(typeof(Service));

        host.AddServiceEndpoint(typeof(IService), tcpBinding, "net.tcp://localhost:8232/Service/");


        host.Open();

        Console.ReadLine();

        host.Close(); `

** 客户端配置 **

    string endPointAdress = "net.tcp://10.10.1.1:8232/Service";       

var ServiceProxy = ChannelFactory.CreateChannel(tcpBinding, new EndpointAddress(endPointAdress));

*/ 客户端和服务的 tcp 绑定相同。

这个问题会因为数据合同而发生吗?但如果是,它也不应该适用于本地主机。请指正,如果我的理解是错误的。

解决方案

从更改服务器配置

** net.tcp://127.0.0.1:8232/Service/ ** 到 ** net.tcp://localhost:8232/Service/ ** 似乎解决了这个问题。并且提到的解决方案可能对某些人有所帮助。可能有人可以帮助这是为什么?谢谢大家。

4

0 回答 0