ASP.NETコアにgRPCサービスアプリケーションを追加します
gRPCは必要gRPCのパッケージを。
設定gRPC
中Startup.csで:
- でgRPC
AddGrpc
有効にする方法。 - 各gRPCサービス
MapGrpcService
パイプラインのルーティング方法に加えます。
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を必要とします。
- ものとTLS(Transport Layer Security)を保護します。
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エンドポイントを使用して保護
{
"Kestrel": {
"Endpoints": {
"HttpsInlineCertFile": {
"Url": "https://localhost:5001", "Protocols": "Http2", "Certificate": { "Path": "<path to .pfx file>", "Password": "<certificate password>" } } } } }
あるいは、Program.csのはケストレルエンドポイントに配置されました。
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容器から解決することができます。
public class GreeterService : Greeter.GreeterBase { public GreeterService(ILogger<GreeterService> logger) { } }
デフォルトでは、gRPCサービスの実装は、の寿命(単独で、スコープまたは一時的な)を持っている他のDIサービスを解析することができます。
GRPC分析方法のHttpContext
GRPC APIは(そのような方法、ホスト、ヘッダーとテイルのような)特定のHTTP / 2メッセージデータへのアクセスを提供します。 それぞれに渡すことによってServerCallContext
、パラメータgRPCメソッドにアクセスします。
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のために設けられた拡張メソッドHttpContext
HTTP / 2メッセージの基礎を示すためにフルアクセス: GetHttpContext
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 }); } }