gpt4 book ai didi

c# - 尝试连接到远程 WCF 服务时出现 TCP 错误 (10060)

转载 作者:行者123 更新时间:2023-11-30 18:40:22 25 4
gpt4 key购买 nike

我有一个简单的 WCF 服务。由于各种原因,所有配置都是以编程方式完成的,而不是在 xml 中。服务是自托管的。当我在本地机器上运行主机和客户端时,它运行良好。当我将主机移动到 LAN 上的另一台机器时,它也能很好地工作。但是,当我尝试通过我的 LAN 外部(即使用我的路由器的 WAN 地址而不是本地 LAN 地址)访问任何一台机器上的主机时,它不起作用并且我得到以下错误。我正在将路由器上的端口 8100 转发到服务主机。我还清除了主机防火墙上的端口,并尝试完全关闭防火墙。双方都没有快乐。

我现在使用没有安全性的 TCP 来使事情简单化。任何人都可以提出可能导致这种行为的原因吗?谢谢。

(注意:我在下面的代码中屏蔽了 WAN 和 LAN 地址。)

我的客户类:

public class TrackingClient : IService
{
protected readonly Binding binding;
protected readonly EndpointAddress endpointAddress;
IService proxy;

public TrackingClient()
{
this.binding = new TCPBinding();
this.endpointAddress = new EndpointAddress("net.tcp://WAN_IP:8100/Tracking");

proxy = ChannelFactory<IService>.CreateChannel(
binding,
endpointAddress);
}

public bool report(Payload payload)
{
return proxy.report(payload);
}
}

我的主机类:

        ServiceHost host = new ServiceHost(typeof(Service));
host.AddServiceEndpoint(
typeof(IService),
new TrackingComm.TCPBinding(),
"net.tcp://LAN_IP:8100/Tracking");

host.Open();
Console.WriteLine("=== TRACKING HOST ===");
Console.ReadLine();
host.Close();

我的绑定(bind):

public class TCPBinding : NetTcpBinding
{
public TCPBinding()
{
Security.Mode = SecurityMode.None;
Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.None;
Security.Message.ClientCredentialType = MessageCredentialType.None;
}
}

客户端尝试连接时出现的错误:

Could not connect to net.tcp://WAN_IP:8100/. The connection attempt lasted for a time span of 00:00:21.0772055. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond WAN_IP:8100.

[编辑]

在为此苦苦挣扎了好几天之后,我终于设法将问题追溯到路由器的环回问题。虽然我仍然没有弄清楚为什么,但发生的事情是,虽然路由器设置了转发端口,但当我使用 WAN 地址时,来自客户端的调用并没有到达主机。它是否被阻止通过路由器“出去”或“进来”仍然是个谜,但是当我在我的 LAN 物理之外的另一台计算机上运行客户端时,它工作得很好

最佳答案

您要添加到配置文件的代理设置如下:

<system.net>
<defaultProxy>
<proxy
usesystemdefault = "false"
proxyaddress="http://address:port"
bypassonlocal="false"
/>
</defaultProxy>
</system.net>

[补充]
WCF service connection issue - maybe security?
[/补充]

关于c# - 尝试连接到远程 WCF 服务时出现 TCP 错误 (10060),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com