NetTcpBinding - 自托管WCF - 无法连接客户端

时间:2016-06-17 23:05:36

标签: c# wcf nettcpbinding

尝试获取NetTcpBinding的简单演示,以便将其扩展到另一个项目中。

架构:2个控制台应用程序(1个主机/服务器,1个客户端)和1个类型库项目。两个控制台应用程序都引用了类型库项目。

主持人申请:

class Program
{ 
    static void Main()
    {
        var netTcpBinding = new NetTcpBinding(SecurityMode.None)
        {
            PortSharingEnabled = true
        };

        var netTcpAdddress = new Uri("net.tcp://127.0.0.1:1234/HelloWorldService/");

        var tcpHost = new ServiceHost(typeof(HelloWorldService), netTcpAdddress);
        tcpHost.AddServiceEndpoint(typeof(IHelloWorld), netTcpBinding, "IHelloWorld");

        tcpHost.Open();
        Console.WriteLine($"tcpHost is {tcpHost.State}.  Press enter to close.");

        Console.ReadLine();
        tcpHost.Close();
    }
}


public class HelloWorldService : IHelloWorld
{
    public void HelloWorld()
    {
        Console.WriteLine("Hello World!");
    }

    public void WriteMe(string text)
    {
        Console.WriteLine($"WriteMe: {text}");
    }
}

客户端申请

    static void Main()
    {
        Console.WriteLine("Press enter when the service is opened.");
        Console.ReadLine();


        var endPoint = new EndpointAddress("net.tcp://127.0.0.1:1234/HelloWorldService/");
        var binding = new NetTcpBinding ();
        var channel = new ChannelFactory<IHelloWorld>(binding, endPoint);
        var client = channel.CreateChannel();

        try
        {
            Console.WriteLine("Invoking HelloWorld on TcpService.");
            client.HelloWorld();
            Console.WriteLine("Successful.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Exception: {ex.Message}");
        }

        Console.WriteLine("Press enter to quit.");
        Console.ReadLine();
    }

类型库:

[ServiceContract]
public interface IHelloWorld
{
    [OperationContract]
    void HelloWorld();

    [OperationContract]
    void WriteMe(string text);
}

我相信我已经安装并运行了所有必要的服务:

enter image description here

显然,我试图在运行时完成所有配置。

我一直在客户端上收到此错误消息:

在TcpService上调用HelloWorld。

  

异常:没有端点收听   net.tcp://127.0.0.1:1234 / HelloWorldService /可以接受   信息。这通常是由错误的地址或SOAP操作引起的。   有关更多详细信息,请参阅InnerException(如果存在)。按enter键退出。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您的服务正在地址公开端点:

net.tcp://127.0.0.1:1234/HelloWorldService/IHelloWorld

但您的客户正在连接到:

net.tcp://127.0.0.1:1234/HelloWorldService/

您还需要将客户端NetTcpBinding SecurityMode设置为与服务器(None)相同。