gRPCのASP.NETコアサービスを使用します

ASP.NETコアにgRPCサービスアプリケーションを追加します

gRPCは必要gRPCのパッケージを。

設定gRPC

中Startup.csで:

  • でgRPC AddGrpc有効にする方法。
  • 各gRPCサービスMapGrpcServiceパイプラインのルーティング方法に加えます。
C#の
 
 
public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseEndpoints(endpoints => { // 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 endpoints.MapGrpcService<GreeterService>(); }); } } 

ASP.NETコアミドルウェア機能とルーティングパイプラインを共有し、アプリケーションの要求ハンドラを提供するように構成することができます。 並列に構成された他の要求ハンドラ(例えば、MVCコントローラ)とgRPCサービス。

設定のチョウゲンボウ

ケストレルgRPCエンドポイント:

HTTP / 2

gRPCは、HTTP / 2と主張します。 ASP.NETコア用gRPCは、検証のHttpRequestですHTTP/2

最も近代的なオペレーティングシステムでは、ケストレルはHTTP / 2をサポートしています  。 デフォルトでは、ケストレル1.1エンドポイントおよびHTTP / 2接続のHTTP /をサポートするように設定。

TLS

gRPCためケストレルエンドポイントは、保護のためにTLSを使用する必要があります。 開発ではとASP.NETコア開発用証明書の存在になりhttps://localhost:5001、エンドポイントは自動的にTLS保護を使用して作成されます。 これは、設定の必要はありません。 httpsケストレルのエンドポイントはTLSを使用している接頭辞を確認してください。

本番環境では、明示的にTLSを設定する必要があります。 以下でのAppSettings:例えば、HTTP / 2はTLSエンドポイントを使用して保護

JSON
 
{
  "Kestrel": {
    "Endpoints": {
      "HttpsInlineCertFile": {
        "Url": "https://localhost:5001", "Protocols": "Http2", "Certificate": { "Path": "<path to .pfx file>", "Password": "<certificate password>" } } } } } 

あるいは、Program.csのはケストレルエンドポイントに配置されました。

C#の
 
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(options => { options.Listen(IPAddress.Any, 5001, listenOptions => { listenOptions.Protocols = HttpProtocols.Http2; listenOptions.UseHttps("<path to .pfx file>", "<certificate password>"); }); }); webBuilder.UseStartup<Startup>(); }); 

プロトコルのネゴシエーション

通信を保護するためのセキュリティのためのTLS。 エンドポイントが複数のプロトコルをサポートし、TLS アプリケーション層のプロトコルのネゴシエーション(ALPN)ハンドシェイクネゴシエーション接続プロトコルクライアントとサーバ。 この接続はHTTP / 1.1またはHTTP / 2を使用して交渉しています。

TLSを使用せずにHTTP / 2エンドポイントを設定した場合、エンドポイント  ListenOptions.Protocolsを  設定しなければなりません  HttpProtocols.Http2。 (例えば)複数のプロトコルで終わらHttpProtocols.Http1AndHttp2ないネゴシエーションがないため、ポイントはTLSを使用することができません。 安全でないHTTP / 1.1へのすべての接続のデフォルトのエンドポイント、およびgRPCコールに失敗しました。

ケストレルで有効になっているHTTP / 2およびTLSの詳細については、を参照してくださいケストレルのエンドポイント構成

 リマーク

MacOSのは、ASP.NETコアgRPCとTLSをサポートしていません。 MacOSでgRPCサービスは、追加の設定を必要と正常に実行。 詳細については、ASP.NETコアgRPCがMacOSの中で使用可能ではありません

ASP.NETコアAPIとの統合

(のようなASP.NETのコア機能のためのgRPCサービス依存性注入(DI)およびロギングは)完全なアクセス権を持っています。 例えば、サービス実装は、コンストラクタを介してサービスレコードDI容器から解決することができます。

C#の
public class GreeterService : Greeter.GreeterBase { public GreeterService(ILogger<GreeterService> logger) { } } 

デフォルトでは、gRPCサービスの実装は、の寿命(単独で、スコープまたは一時的な)を持っている他のDIサービスを解析することができます。

GRPC分析方法のHttpContext

GRPC APIは(そのような方法、ホスト、ヘッダーとテイルのような)特定のHTTP / 2メッセージデータへのアクセスを提供します。 それぞれに渡すことによってServerCallContext、パラメータgRPCメソッドにアクセスします。

C#の
 
public class GreeterService : Greeter.GreeterBase { public override Task<HelloReply> SayHello( HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } } 

ServerCallContextすべてのASP.NET APIでさHttpContextへのフルアクセスを提供していません。 でASP.NET APIのために設けられた拡張メソッドHttpContextHTTP / 2メッセージの基礎を示すためにフルアクセス: GetHttpContext

C#の
 
public class GreeterService : Greeter.GreeterBase { public override Task<HelloReply> SayHello( HelloRequest request, ServerCallContext context) { var httpContext = context.GetHttpContext(); var clientCertificate = httpContext.Connection.ClientCertificate; return Task.FromResult(new HelloReply { Message = "Hello " + request.Name + " from " + clientCertificate.Issuer }); } } 

Azureのアプリケーションサービスは、gRPCをサポートしていません。

おすすめ

転載: www.cnblogs.com/Javi/p/11752991.html