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