试图连接到远程WCF服务时,TCP错误(10060)

本文关键字:TCP 错误 10060 服务 连接 WCF | 更新日期: 2023-09-27 18:16:24

我有一个简单的WCF服务。由于各种原因,所有配置都是通过编程而不是xml完成的。服务是自托管的。当我在本地机器上运行主机和客户机时,效果非常好。当我将主机移动到LAN上的另一台机器上时,它也能很好地工作。然而,当我试图通过离开我的LAN(即使用我的路由器的WAN地址而不是本地LAN地址)到达任何一台机器上的主机时,它不起作用,我得到下面的错误。我am将路由器上的端口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();

我的绑定:

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外的另一台计算机上运行客户端时,它工作得很好

试图连接到远程WCF服务时,TCP错误(10060)

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

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

(除了)WCF服务连接问题——可能是安全问题?
[/除了]

这适用于我的服务:

 <system.net>
    <defaultProxy>
       <proxy autoDetect="True"/>
    </defaultProxy>
 </system.net>