代码之家  ›  专栏  ›  技术社区  ›  Daniel Rahamim

服务结构同一服务上的多个WCF终结点

  •  0
  • Daniel Rahamim  · 技术社区  · 6 年前

    我正在尝试为一个服务创建两个端点:net.tcp和http。两个端点将具有相同的端点名称。 如何在服务织物中进行?

    当不在SF中运行时,很容易在App config中定义它,方法如下:

    <service behaviorConfiguration="DefaultBehavior" name="ContractImplementation">
            <endpoint address="net.tcp://localhost:6000/ContractName" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="ContractName" />
            <endpoint address="http://localhost:6001/ContractName" binding="basicHttpBinding" bindingConfiguration="httpBinding" contract="ContractName" />
    </service>
    

    在SF中运行时,我通过创建wcfcommunicationlistener对象来创建侦听器。我不能用不同的绑定创建另一个,因为它抱怨终结点名称已经在使用中。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Diego Mendes    6 年前

    如文件所述 here :

    为一个服务创建多个侦听器时,必须为每个侦听器指定一个唯一的名称。

    端点名称必须有不同的名称,您可以在创建侦听器的逻辑中处理加载,您应该为每个端点创建一个侦听器,然后传递每个端点的名称;

    像这样:

    protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
    {
        return new[]
        {
            new ServiceReplicaListener(context =>
              new WcfCommunicationListener<ICalculator>(
                  wcfServiceObject:this,
                  serviceContext:context,
                  endpointResourceName: "WcfServiceEndpoint1",
                  listenerBinding: WcfUtility.CreateTcpListenerBinding()
              )
            ),
            new ServiceReplicaListener(context =>
              new WcfCommunicationListener<ICalculator>(
                  wcfServiceObject:this,
                  serviceContext:context,
                  endpointResourceName: "WcfServiceEndpoint2",
                  listenerBinding: WcfUtility.CreateTcpListenerBinding()
              )
           )
       };
    }
    

    有关如何使用 WcfCommunicationListener here