【问题标题】:WCF Multiple Apps using NetNamedPipe使用 NetNamedPipe 的 WCF 多个应用程序
【发布时间】:2011-07-16 14:59:04
【问题描述】:

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

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

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

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

问候

【问题讨论】:

    标签: c# wcf named-pipes netnamedpipebinding


    【解决方案1】:

    如果您需要为不同的服务合同创建服务主机,如下所示:

    ...    
    host1 = new SeviceHost(typeof(MyClass1, ...);
    host2 = new ServiceHost(typeof(MyClass2, ...);
    ...
    

    那么您确实需要为每个新的 ServiceHost 使用不同的基地址,正如 Mathew 的回答所建议的那样。如果您的所有服务主机都用于相同的 typeof(MyClass1),那么您可能只需要为同一服务创建多个端点。每个端点都可以用于该服务中的不同接口(即 ISomeInterface1、ISomeInterface2、...)。

    【讨论】:

    • 我想在一个应用程序中运行多个应用程序而不是多个服务。
    • 您能定义“应用程序”吗?如果您的应用程序使用多个服务协定(接口),则可以使用具有单个主机的单个 WCF 服务,只要您为每个实现的接口添加一个端点。如果您创建了多个 WCF 服务,每个服务实现不同的接口,那么您必须为每个服务使用单独的 ServiceHost。
    • 应用程序=进程。换句话说:我想要几个进程在不同的“地址”上托管相同的服务。
    • 我对 .NET 中的进程没有太多经验,但在我看来,您需要为每个进程创建一个 ServiceHost 对象,正如 Matthew 所建议的那样,每个进程具有不同的基地址。从 WCF 的角度来看,实例化多个进程听起来有点矫枉过正,因为您可以轻松地配置单个服务来侦听不同的端点地址。我明天看看能不能找到一个代码示例。祝你好运!
    • 这不是关于托管服务,而是关于单机上的 IPC。
    【解决方案2】:

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

    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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多