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

时间:2011-12-02 16:10:28

标签: c# wcf

我有一个简单的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();

我的约束力:

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地址时,来自客户端的呼叫不会进入主机。无论是通过路由器阻止“走出去”还是“进入”仍然是一个谜,但当我在局域网外的另一台计算机上运行客户端时它工作得很好

2 个答案:

答案 0 :(得分:0)

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

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

[加成]
WCF service connection issue - maybe security?
[/加成]

答案 1 :(得分:0)

这适用于我的服务:

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