2016-12-01 4 views
1

Я изучаю SF, и теперь я пытаюсь создать консольный клиент для службы без состояния.Консольный клиент приложения для службы Fabric Stateless Service

пытался следовать инструкциям здесь: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-connect-and-communicate-with-services

и добавил это к моему StatelessService класса

public interface IMyService : IService 
    { 
     Task<string> HelloWorldAsync(); 
    } 

и простой реализации

public Task<string> HelloWorldAsync() 
    { 
     return Task.FromResult("HELLO FROM SERVICE!"); 
    } 

Остальное без изменений.

В моем приложении у меня есть консоль

IMyService helloWorldClient = ServiceProxy.Create<IMyService>(
    new Uri("fabric:/RestGateway/StatelessGateway1")); 
string message = await helloWorldClient.HelloWorldAsync(); 

служба развернута в моем локальном кластере и, кажется, работает нормально (зеленая кнопка), но я получаю исключение при вызове helloWorldClient.HelloWorldAsync().

Любая идея, как я могу это исправить?

ответ

1

Не забудьте добавить слушателя связи к службе, как это:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
{ 
    yield return new ServiceInstanceListener(ServiceRemotingExtensions.CreateServiceRemotingListener(this, Context)); 
} 

Примечание:

Вызов CreateServiceRemotingListener создает специфический communication listener, который может быть использован только в пределах кластер. Таким образом, при разговоре с вашего компьютера-разработчика на службу, запущенную на вашем кластере dev, это будет работать. Вы не можете разговаривать с службами, запущенными на разных машинах, подобных этому.

Чтобы получить доступ к кластеру извне, вы можете использовать, например, ServiceBus, WCF или OWIN. (или что-то, что вы сами создаете)

+0

OK Целью было создать действительно простой клиент (т. е. консольное приложение), что в конечном итоге заставит SF Actors реагировать на входящие сообщения. Я думал, что создание StatelessService было самым простым реле «в» кластере. Будет ли проще создать REST-API-сервис и вызвать его с клиента? Я просто хочу простой путь в кластер для тестирования/обучения. –

+0

Да, если клиент может находиться вне кластера, вам нужно использовать альтернативные способы, о которых я говорил. В зависимости от ваших требований, знаний и предпочтений, любой будет делать. – LoekD

 Смежные вопросы

  • Нет связанных вопросов^_^