两个端点有状态服务无效

时间:2018-02-08 11:58:25

标签: azure-service-fabric service-fabric-stateful

我已经设置了servicefabric有状态服务以使用两个侦听器端点

  1. ServiceRemoting V2
  2. WCF Remoting
  3. 我的CreateServiceReplicaListerners()看起来像这样 -

    return new[]
                 {
                     new ServiceReplicaListener((c) => new FabricTransportServiceRemotingListener(c, this),
                        "dataServiceRemotingListener"),
    
                     new ServiceReplicaListener((context) =>
                        new WcfCommunicationListener<IReferenceDataService>(
                            wcfServiceObject:this,
                            serviceContext:context,
                            //
                            // The name of the endpoint configured in the ServiceManifest under the Endpoints section
                            // that identifies the endpoint that the WCF ServiceHost should listen on.
                            //
                            endpointResourceName: "WcfDataServiceEndpoint",
    
                            //
                            // Populate the binding information that you want the service to use.
                            //
                            listenerBinding: WcfUtility.CreateTcpListenerBinding()
                        ), "dataServiceWCFListener")
                 };
    

    然而,在测试中我发现只有一个端点有效。具体而言,只有首先登记的人才有效。在上面的例子中,Service Remoting工作但是WCF监听器没有。在我试图进行wcf调用的客户端中,我不断收到错误 - The provided URI scheme 'localhost' is invalid; expected 'net.tcp'.

    当更改它们的注册顺序时,WCF远程处理工作但SeviceRemoting不工作。这看起来像一个错误,不确定是否有人遇到类似的问题?

    请告知。

    更新

    这是我的客户端详细信息

     _service = serviceProxyFactory.CreateServiceProxy<IReferenceDataService>(
               new Uri("fabric:/DataService/ReferenceDataService"),
               new ServicePartitionKey(0));
    

1 个答案:

答案 0 :(得分:1)

创建代理时指定侦听器名称。

 var proxy = _serviceProxyFactory.CreateServiceProxy<IMyService>(MyServiceUri, new ServicePartitionKey(partitionKey), TargetReplicaSelector.PrimaryReplica, "dataServiceRemotingListener");

如果省略名称,将使用第一个端点。根据您返回听众的顺序,远程处理是否有效。

此外,请确保在服务清单中声明2个端点。