C#WCF无法使用外部地址访问服务

时间:2016-03-06 15:05:29

标签: c# wcf tcp

我的WCF服务存在一些问题。 我目前正在开发一个客户端/服务器聊天应用程序,无法远程访问服务器。 本地工作得很好,但是当我尝试远程连接它(从不同网络中的另一台计算机)时,我得到了

  

TCP错误代码10060:连接尝试失败,因为   连接方在一段时间后没有正确回应,或者   建立的连接失败,因为连接的主机失败了   回应IP-Adress:3100

如果我尝试通过外部IP地址连接到自己,我会

  

TCP错误代码10061:由于目标无法建立连接   机器主动拒绝了它

我的端口(3100)在我的路由器中打开,防火墙已禁用并启用了端口共享。

服务器

 svh = new ServiceHost(typeof(ServiceAssembly.ServiceImplementation));

        NetTcpBinding tcpBinding = new NetTcpBinding();

        tcpBinding.MaxConnections = 100;
        tcpBinding.MaxBufferPoolSize = (int)4096;
        tcpBinding.MaxBufferSize = 4096;
        tcpBinding.MaxReceivedMessageSize = (int)4096;
        tcpBinding.TransactionFlow = false;
        tcpBinding.Security.Transport.ProtectionLevel =
           System.Net.Security.ProtectionLevel.EncryptAndSign;
        tcpBinding.Security.Transport.ClientCredentialType =
           TcpClientCredentialType.Windows;
        tcpBinding.Security.Mode = SecurityMode.None;
        svh.AddServiceEndpoint(
            typeof(ServiceAssembly.IChat),
            tcpBinding,
            "net.tcp://localhost:3100/MyService");

        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());


        Console.WriteLine("Starting server...");
        try
        {
            svh.Open();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }

客户端:

public string m_ipAdress = "XX.XXX.XXX.XXX";
    string m_port = "3100";
    DuplexChannelFactory<IChat> scf;
    IChat s;

    private void login_btn_Click(object sender, RoutedEventArgs e)
    {
        Callback callback = new Callback();
        InstanceContext context = new InstanceContext(callback);
        NetTcpBinding tcpBinding = new NetTcpBinding();

        tcpBinding.MaxConnections = 100;
        tcpBinding.MaxBufferPoolSize = (int)4096;
        tcpBinding.MaxBufferSize = 4096;
        tcpBinding.MaxReceivedMessageSize = (int)4096;
        tcpBinding.TransactionFlow = false;
        tcpBinding.Security.Transport.ProtectionLevel =
           System.Net.Security.ProtectionLevel.EncryptAndSign;
        tcpBinding.Security.Transport.ClientCredentialType =
           TcpClientCredentialType.Windows;
        tcpBinding.Security.Mode = SecurityMode.None;

        scf = new DuplexChannelFactory<IChat>(context, tcpBinding,
                    "net.tcp://" + m_ipAdress + ":" + m_port + "/MyService");
        s = scf.CreateChannel();
        try
        {
            s.Connect();

        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex.Message);
        }
    }

在s.Connect()上我的程序挂起,我收到TCP错误。这是对服务器的第一次调用。

我搜索并搜索了答案,但没有任何帮助...... 在Windows 10上托管服务器。 如果我需要添加任何内容,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:1)

找出导致此问题的原因。 我一直在使用localhost作为我的服务器端点地址。将其更改为我的networkadapters本地IP(192.168.1.150),一切正常。