Сервер Blazor и сервер GRP C в одном приложении - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь добавить возможность сервера GRP C в существующее серверное приложение Blazor. Предполагается, что приложение предоставит веб-интерфейс для работы человека, а также сервер GRP C для доступа других клиентских приложений GRP C. Я прошел через учебные пособия и документацию по. NET GRP C, и я понимаю концепции. Я не понимаю, как или даже можно ли настроить сервер Kestrel для этого.

В приложение Blazor я добавил то, что, по моему мнению, необходимо для реализации basi c «Greeter» сервис, который поставляется с шаблоном проекта Visual Studio «gRP C Service». Приложение создается и запускается, но когда я пытаюсь получить доступ к веб-сайту Blazor из браузера, я получаю сообщение « Связь с конечными точками gRP C должна осуществляться через gRP C client », в котором говорится Мне известно, что сервер GRP C теперь работает, но сервер Blazor теперь не работает.

Можно ли настроить разные URL-адреса для битов Blazor и C GRP, и если да, то как? Или мне нужно еще что-то сделать? Мы будем очень благодарны за любые идеи.

EDIT

Ниже показаны фрагменты кода, которые я отредактировал, чтобы добавить материал gRP C:

Файл csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <Version>1.0.3</Version>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Grpc.AspNetCore" Version="2.29.0" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.3" />
    </ItemGroup>

    <ItemGroup>
        <ProjectReference Include="..\S34021.Edm\S34021.Edm.csproj" />
    </ItemGroup>

    <ItemGroup>
        <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
    </ItemGroup>

</Project>

Настройки приложения. json файл:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "EndpointDefaults": {
      "Protocols": "Http2"
    }
  }

}

Файл Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddSingleton<WeatherForecastService>();
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{

  if (env.IsDevelopment())
  {
      app.UseDeveloperExceptionPage();
  }
  else
  {
      app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
      app.UseHsts();
  }

  app.UseHttpsRedirection();
  app.UseStaticFiles();

  app.UseRouting();

  app.UseEndpoints(endpoints =>
  {
      endpoints.MapBlazorHub();
      endpoints.MapFallbackToPage("/_Host");

      // Added for GRPC
      endpoints.MapGrpcService<GreeterService>();

      endpoints.MapGet("/", async context =>
      {
        await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
      });

    });

}
...