如何在同一台机器上打开2个命名管道?

时间:2012-03-01 09:49:58

标签: c# wcf

我想在我的机器上运行我的程序的两个实例。 每个实例都需要localhost命名管道:

_host = new ServiceHost(typeof(ManagementConsole),
            new Uri[]
            {
                new Uri("net.pipe://localhost")
            });

_host.AddServiceEndpoint(typeof(IManagementConsole),
     new NetNamedPipeBinding(),
     "PipeManagementConsole");

_host.Open();

在我的程序的另一个实例中,我使用PipeManagementConsole2

所以客户应该使用net.pipe://localhost/PipeManagementConsolenet.pipe://localhost/PipeManagementConsole2

但是Windows不允许运行我的程序的第二个实例,它声称net.pipe://localhost已经在使用(它是),我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

在创建ServiceHost时应指定不同的地址,而不是在调用AddServiceEndpoint时指定。

此代码可以正常工作:

_host = new ServiceHost(typeof(ManagementConsole),
                            new Uri[]
                            {
                                new Uri("net.pipe://localhost/2")
                            });

_host.AddServiceEndpoint(typeof(IManagementConsole),
    new NetNamedPipeBinding(),
    "PipeManagementConsole");

_host.Open();

客户应使用"net.pipe://localhost/2/PipeManagementConsole"

但是这段代码不起作用:

_host = new ServiceHost(typeof(ManagementConsole),
                        new Uri[]
                        {
                            new Uri("net.pipe://localhost")
                        });

_host.AddServiceEndpoint(typeof(IManagementConsole),
    new NetNamedPipeBinding(),
    "PipeManagementConsole2");

_host.Open();

如果net.pipe://localhost/PipeManagementConsole已在使用

我不知道为什么net.pipe://localhost/2/PipeManagementConsole优于net.pipe://localhost/PipeManagementConsole2

答案 1 :(得分:4)

你不能

enter image description here