c# - 使用 NetNamedPipe 的 WCF 多个应用程序

标签 c# wcf named-pipes netnamedpipebinding

我正在尝试在同一台机器上运行多个 WCF 服务托管应用程序。

我想运行多个应用程序 - 而不是在一个应用程序中运行多个服务。

var host = new ServiceHost(typeof(MyClass1), new Uri[] { new Uri("net.pipe://localhost") });
host.AddServiceEndpoint(typeof(ISomeInterface),  new NetNamedPipeBinding(), "FOO");
host.Open();

我为每个应用程序更改了“FOO”,但仍然无法启动多个服务。 猜猜它很简单,但我卡住了:(

问候

最佳答案

像这样接近它会做你想做的,我相信:

string relativeUriPart = GetUniquePartFromConfigOfThisApplicationInstance();
var host = new ServiceHost(typeof(MyClass1)); // No base addresses specified
host.AddServiceEndpoint(
    typeof(ISomeInterface),  
    new NetNamedPipeBinding(), 
    "net.pipe://localhost/" + relativeUriPart); // Specify absolute URI for endpoint
host.Open();

这是因为,如果您指定一个使用 net.pipe 方案的基地址,则该基地址将用于导出监听器使用的管道名称 [请参阅下面的编辑] ,这在每个应用程序实例中都是相同的,因此只有第一个应用程序的监听器可以创建管道 - 正如您所指出的那样,其他应用程序会失败。

在端点级别使用绝对 URI,没有基地址,监听器是用从完整的绝对 URI 派生的管道名称 [见下面的编辑] 创建的,这在每个应用程序实例中都是不同的,因此每个应用程序的监听器可以毫无问题地创建自己独特的管道。


编辑:更准确地说,管道名称本身根本不是从服务地址派生的——它是一个 GUID,每次打开服务时都会更改。从服务地址派生的是共享内存对象的名称,管道的实际名称通过该对象发布给潜在客户。 See here for more details.

关于c# - 使用 NetNamedPipe 的 WCF 多个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326262/

相关文章:

.net - 正在读取自定义 HttpWebResponse StatusDescription?

C#: Asynchronous NamedPipeServerStream The pipe is being closed 异常

c# - 使用 Union 的匿名类型错误

c# - 具有持久性的网页导航 - ASP.NET C#

c# - 在 WCF 中,操作是否总是在与消息检查器相同的线程上调用?

wcf - 您如何配置 WCF 以支持使用 net.pipe 的主机和客户端在同一进程中的 FaultContract?

c# - 双工命名管道 - 单个管道上的最大客户端数量

c# - 加载程序集并使用不同的名称和扩展名复制它

c# - 将图像存储在 arrayList 中

c# - 在 WCF 中将异常作为响应的一部分传递