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