我一直在研究一个示例应用程序,以在客户端流模式下实现从客户端(.Net 框架或 .Net Core 2.1)到 gRPC 服务器(.Net Core 3.1)的 gRPC 通信。我读过很多次,使用 gRPC web,只有一元和服务器流是可能的。
但是,当我使用 Grpc.Net.Client.Web Nuget 包实现 gRPC Web 客户端时,我可以看到客户端流是可能的。我的 gRPC 服务器是启用了 gRPCWeb 的 Asp.NetCore 3.1 项目。
服务器端:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
*app.UseGrpcWeb();*
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
endpoints.MapGrpcService<ClientStreamingExampleService>()*.EnableGrpcWeb();*
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");
});
});
}
客户端:
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = new GrpcWebHandler(new HttpClientHandler() { UseProxy = false })
}) ;
var client = new clientstreamingexampleClient(channel);
var dataRequest = client.SendData();
foreach (var name in new[] { "text11", "text12", "text13", "text14", "text15" })
{
await dataRequest.RequestStream.WriteAsync(new MyDataStreamRequest { Name = name });
}
如果我的理解有问题,请帮助我。