Размещение службы gRPC в приложении Windows Forms

Я хочу создать службу gRPC, но мне нужно разместить ее в приложении winform .net. есть необычный пример того, как хостинг ASP.NET Core API в приложении Windows Forms Я хотел бы, чтобы кто-нибудь объяснил мне, что мне нужно установить и что я должен изменить в этом примере, чтобы разместить службу grpc в виде Windows ...


person Fabian Wesling    schedule 01.11.2020    source источник
comment
Ну, вы бы сделали точно так же, как в этом посте, но просто использовали конечные точки grpc (endpoints.MapGrpcService), как здесь - docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-3.1 вместо конечных точек mvc. Итак, еще раз - то же самое, что и в этом посте, но просто замените настройку mvc на настройку grpc, как в официальной документации.   -  person Nikita Chayka    schedule 01.11.2020
comment
Ссылка создает клиента и сервер и соединяет клиента с сервером. Оконная форма — это клиент, а контроллер — это сервер. Проект формы Windows обычно имеет Startup.cs с вызовом формы, которая имеет [STAThread]. Ссылка запускает WebHost до запуска формы, поэтому сервер запускается раньше клиента. Обычный код формы находится в классе Startup формы. Поэтому, когда вы создаете новый проект формы, добавьте код шага 7 в файл program.cs. Затем шаг 6 переходит в основной модуль формы.   -  person jdweng    schedule 01.11.2020
comment
Спасибо за ответы. Я пытался следовать инструкциям, но не могу этого сделать, потому что gRPC автоматически генерирует сервис и сохраняет его в папке obj, а я не могу его создать, другая проблема заключается в том, что services.AddGrpc() использует расширение библиотеки Grpc.AspNetCore.Server, несовместимой с .net framework 4.X. так что я вижу, что это не поддерживается, по-видимому   -  person Fabian Wesling    schedule 01.11.2020


Ответы (1)


Вы можете выполнить те же шаги, но с несколькими дополнительными:

  1. Установите пакет Microsoft.AspNetCore.Grpc.HttpApi. Он сопоставит ваши конечные точки gRPC с классическим HTTP. Вам не нужно автоматически указывать службы в Startup.cs следующим образом:
    app.UseEndpoints(endpoints =>
            {
                endpoints.MapGrpcService<MygRPCService>();
            });
  1. В ваших прототипах вам нужно указать путь HTTP, что-то вроде этого:
     rpc Get(GetRequest) returns (GetReply) {
        option (google.api.http) = {
          get: '/my-endpoint'
          body: '*'
        };
      }
  1. Добавьте в метод Startup.cs ConfigureService:
    services.AddGrpc();
    services.AddGrpcHttpApi(); 
person Jesus Santander    schedule 02.11.2020