Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务结构同一服务上的多个WCF终结点_Wcf_Azure Service Fabric - Fatal编程技术网

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

服务结构同一服务上的多个WCF终结点,wcf,azure-service-fabric,Wcf,Azure Service Fabric,我正在尝试为一个服务创建两个端点:net.tcp和http。两个端点将具有相同的端点名称。 如何在服务织物中实现这一点 当不在SF中运行时,很容易在App config中定义它,方法如下: <service behaviorConfiguration="DefaultBehavior" name="ContractImplementation"> <endpoint address="net.tcp://localhost:6000/ContractName"

我正在尝试为一个服务创建两个端点: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对象来创建侦听器。我无法创建另一个具有不同绑定的端点,因为它抱怨端点名称已在使用。

如文档中所述:

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

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

大概是这样的:

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()
          )
       )
   };
}
protectedoverride IEnumerable CreateServiceReplicaListeners()
{
返回新的[]
{
新ServiceReplicaListener(上下文=>
新的WcfCommunicationListener(
wcfServiceObject:这个,
serviceContext:context,
endpointResourceName:“WcfServiceEndpoint1”,
listenerBinding:wcfurtility.CreateTcpListenerBinding()
)
),
新ServiceReplicaListener(上下文=>
新的WcfCommunicationListener(
wcfServiceObject:这个,
serviceContext:context,
endpointResourceName:“WcfServiceEndpoint2”,
listenerBinding:wcfurtility.CreateTcpListenerBinding()
)
)
};
}
有关如何使用
WcfCommunicationListener
的更多信息,请检查,如文档中所述:

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

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

大概是这样的:

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()
          )
       )
   };
}
protectedoverride IEnumerable CreateServiceReplicaListeners()
{
返回新的[]
{
新ServiceReplicaListener(上下文=>
新的WcfCommunicationListener(
wcfServiceObject:这个,
serviceContext:context,
endpointResourceName:“WcfServiceEndpoint1”,
listenerBinding:wcfurtility.CreateTcpListenerBinding()
)
),
新ServiceReplicaListener(上下文=>
新的WcfCommunicationListener(
wcfServiceObject:这个,
serviceContext:context,
endpointResourceName:“WcfServiceEndpoint2”,
listenerBinding:wcfurtility.CreateTcpListenerBinding()
)
)
};
}
有关如何使用WcfCommunicationListener的更多信息,请查看