Можно ли вызвать службу без сохранения состояния с помощью RPC вне кластера, но в той же локальной сети? - PullRequest
0 голосов
/ 08 сентября 2018

На моем локальном компьютере в Visual Studio 2017 я создал решение на основе шаблона .NET Core Stateless Service и добавил пакет Microsoft.ServiceFabric.Services.Remoting.Runtime для приема удаленных вызовов через RPC.

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return this.CreateServiceRemotingInstanceListeners();
}

Затем я добавил интерфейс ITestAccUp в отдельный проект:

public interface ITestAccUp : IService
{
    Task NotifyAsync();
}

Я добавил реализацию интерфейса в службу без сохранения состояния и создал еще один проект - консольный клиент .NET Core для запуска службы.Консоль будет запускаться вне кластера.

static void Main(string[] args)
{
    ITestAccUp testAccUpClient = ServiceProxy.Create<ITestAccUp>(new Uri("fabric:/SFAccountUpTest/Stateless1"));

    testAccUpClient.NotifyAsync().Wait();
}

Однако, когда я запускаю ее, я получаю ошибку "InvalidCastException: Невозможно привести COM-объект типа 'System .__ ComObject' к интерфейсу.введите 'IFabricTestManagementClient4'. Эта операция завершилась неудачно, поскольку не удалось выполнить вызов QueryInterface для компонента COM для интерфейса с IID '{B96AA7D4-ACC0-4814-89DC-561B0CBB6028}' из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT:0x80004002 (E_NOINTERFACE)). ", хотя фабрика именованных приложений: / SFAccountUpTest / Stateless1, кажется, запущена и работает.

Я полагаю, проблема в том, что вызовы RPC только что сделаны для вызова служб внутри кластеров SF,не снаружи.Можно ли сделать вызов RPC вне кластера или необходимо создать какой-либо веб-API для вызова службы?

solution structure

1 Ответ

0 голосов
/ 08 сентября 2018

Пока вы находитесь в одной сети, вы можете звонить в Службы и Актеров, используя SF Remoting из других приложений. Например, см. этот демонстрационный проект , который делает это для целей тестирования.

Убедитесь, что вы используете одну и ту же DLL-библиотеку, которая содержит определение интерфейса как клиента, так и проекта службы. (Он работает не так, как WCF, где прокси-сервер может быть создан независимо от службы с помощью wsdl.)

Возможно, вы столкнулись с проблемой, например эта одна или эта одна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...