我有一个托管在控制台进程中的 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/ ** 似乎解决了这个问题。并且提到的解决方案可能对某些人有所帮助。可能有人可以帮助这是为什么?谢谢大家。