【问题标题】:Service fabric multiple WCF endpoints on same service同一服务上的服务结构多个 WCF 终结点
【发布时间】:2019-03-13 23:26:28
【问题描述】:

我正在尝试为服务创建 2 个端点:net.tcp 和 http。两个端点将具有相同的端点名称。 如何在 Service Fabric 中实现?

不运行在 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 中运行时,我通过创建 WcfCommunictionListener 对象来创建侦听器。我无法使用不同的绑定创建另一个,因为它抱怨端点名称已在使用中。

【问题讨论】:

    标签: wcf azure-service-fabric


    【解决方案1】:

    如文档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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      相关资源
      最近更新 更多