2017-01-16 4 views
0

Я пытаюсь найти свою службу без состояния, используя метод IServiceProxyFactoryCreateServiceProxy. Кажется, он находит экземпляр службы, но когда я вызываю метод, он получает ошибку "Client is trying to connect to invalid address net.tcp://localhost...". Служба stateless использует WcfCommunicationListener.Не удалось найти мою службу без состояния, использующую WcfCommunicationListener

ответ

1

По умолчанию IServiceProxyFactory является ServiceProxyFactory, что создает экземпляр FabricTransportServiceRemotingClientFactory, который, в свою очередь, дает вам FabricTransportServiceRemotingClient. Об этом сообщается (как следует из названия) с использованием транспорта Fabric через TCP. Транспортировка ткани предполагает, что Служба получит слушателя транспорта ткани FabricTransportServiceRemotingListener по адресу, подобному fabric:/applicationname/servicename.

Если вы хотите подключиться к службе, которое слушает соединения, используя WcfCommunicationListener, то вам необходимо подключить к нему с помощью WcfCommunicationClient, что вы можете создать так:

// Create binding 
Binding binding = WcfUtility.CreateTcpClientBinding(); 
// Create a partition resolver 
IServicePartitionResolver partitionResolver = ServicePartitionResolver.GetDefault(); 
// create a WcfCommunicationClientFactory object. 
var wcfClientFactory = new WcfCommunicationClientFactory<IMyService> 
    (clientBinding: binding, servicePartitionResolver: partitionResolver); 
var myServiceClient = new WcfCommunicationClient(
    wcfClientFactory, 
    ServiceUri, 
    ServicePartitionKey.Singleton); 

Приведенный выше пример из документация https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication-wcf

Таким образом, измените сервис, чтобы использовать транспортировку ткани, если вы хотите использовать ServiceProxy для создания клиента или вместо него изменить свою клиентскую сторону для использования WcfCommunicationClient.