aspnetcore java,ASP.NET Core(.NET Core 3.0)使用gRPC服务(客户端和服务端)的方法代码

1、.NET Core 3.0安装配置

2、安装引用Grpc.AspNetCore

使用命令安装Install-Package Grpc.AspNetCore -Version 2.23.2

Nuget管理器中搜索"Grpc.AspNetCore",然后点击“安装”

3、配置gRPC

1) 在Startup.cs中配置

gRPC 是通过AddGrpc方法启用的,每个 gRPC 服务通过MapGrpcService方法添加到路由管道。代码如下:public class Startup{

//这个方法被运行时调用。使用此方法向容器添加服务。

//有关如何配置应用程序的更多信息,请访问 https://go.microsoft.com/fwlink/?LinkID=398940

public void ConfigureServices(IServiceCollection services){

services.AddGrpc();

}

// 此方法由运行时调用。使用此方法配置HTTP请求管道。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.UseRouting();

app.UseEndpoints(endpoints =>

{

// 与gRPC端点的通信必须通过gRPC客户端进行。

//要学习如何创建客户端,请访问: https://go.microsoft.com/fwlink/?linkid=2086909

endpoints.MapGrpcService();

});

}

}

ASP.NET Core 中间件和功能共享路由管道,因此可以将应用配置为提供其他请求处理程序。 其他请求处理程序(如 MVC 控制器)与已配置的 gRPC 服务并行工作。

2) 在 Program.cs中配置Kestrelpublic static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.ConfigureKestrel(options =>

{

// This endpoint will use HTTP/2 and HTTPS on port 5001.

options.Listen(IPAddress.Any, 5001, listenOptions =>

{

listenOptions.Protocols = HttpProtocols.Http2;

listenOptions.UseHttps("",

"");

});

});

webBuilder.UseStartup();

});

4、与 ASP.NET Core Api 集成

gRPC 服务对 ASP.NET Core 功能(如依赖关系注入(DI)和日志记录)具有完全访问权限。 例如,服务实现可以通过构造函数从 DI 容器解析记录器服务:public class GreeterService : Greeter.GreeterBase

{

public GreeterService(ILogger logger)

{

}

}

5、解析 gRPC 方法中的 HttpContext

GRPC API 提供对某些 HTTP/2 消息数据(如方法、主机、标头和尾部)的访问权限。 通过传递给每ServerCallContext个 gRPC 方法的参数访问:public class GreeterService : Greeter.GreeterBase

{

public override Task 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 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

});

}

}

6、客户端调用代码

using System;

using System.Net.Http;

using System.Threading.Tasks;

using GrpcGreeter;

using Grpc.Net.Client;

namespace GrpcGreeterClient

{

class Program

{

#region snippet

static async Task Main(string[] args){

// The port number(5001) must match the port of the gRPC server.

var channel = GrpcChannel.ForAddress("https://localhost:5001");

var client = new Greeter.GreeterClient(channel);

var reply = await client.SayHelloAsync(

new HelloRequest { Name = "GreeterClient" });

Console.WriteLine("Greeting: " + reply.Message);

Console.WriteLine("Press any key to exit...");

Console.ReadKey();

}

#endregion

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值