我想在我的机器上运行我的程序的两个实例。 每个实例都需要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/PipeManagementConsole
和net.pipe://localhost/PipeManagementConsole2
。
但是Windows不允许运行我的程序的第二个实例,它声称net.pipe://localhost
已经在使用(它是),我该如何解决这个问题?
答案 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)
你不能