Asp.net core 在.net内核中通过http发出Grpc请求时,会创建以下异常。我正在使用.NETCore3.1
在我的program.cs文件中,我使用的UseURL设置为“http://localhost/5009“在appsettings.json中,kestrel部分如下所示Asp.net core 在.net内核中通过http发出Grpc请求时,会创建以下异常。我正在使用.NETCore3.1,asp.net-core,grpc,Asp.net Core,Grpc,在我的program.cs文件中,我使用的UseURL设置为“http://localhost/5009“在appsettings.json中,kestrel部分如下所示 public UserDetails GetToken(UserDetails aUserDetails) { try { AppContext.SetSwitch( "
public UserDetails GetToken(UserDetails aUserDetails)
{
try
{
AppContext.SetSwitch(
"System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
using GrpcChannel channel1 = Grpc.Net.Client.GrpcChannel.ForAddress("http://localhost:5009/");
var client1 = new Greeter.GreeterClient(channel1);
UserDetails lUserDetails = client1.GetToken(aUserDetails);
return lUserDetails;
}catch(Exception ex)
{
throw ex;
}
}```
port no in Grpc Service and client is same.
我删除了appsettings.json中的kestrel部分,一切正常我可以用这种方式解决它:
"Kestrel": {
"Endpoints": {
"HttpsInlineCertFile": {
"Url": "https://localhost:5010",`enter code here`
"Protocols": "Http2"
}
//,
//"EndpointDefaults": {
// "Url": "http://localhost:5001",
// "Protocols": "Http2"
//}
}
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(配置)
.ConfigureKestrel(选项=>
{
var(httpPort,grpcPort)=GetDefinedPorts();
选项.Listen(IPAddress.Any、httpPort、listenOptions=>
{
listenOptions.Protocols=HttpProtocols.http1和http2;
UseHttps();
});
选项.Listen(IPAddress.Any、grpcPort、listenOptions=>
{
listenOptions.Protocols=HttpProtocols.Http2;
});
})
.UseStartup();
私有静态(int-httpPort,int-grpcPort)GetDefinedPorts()
{
var grpcPort=Configuration.GetValue(“GRPC_-PORT”,5000);
var port=Configuration.GetValue(“端口”,5001);
返回(端口,grpcPort);
}
基本上我配置了两个端口:
- 5001上支持HTTP 1和2的HTPPS端口,然后我可以打开“localhost:50001/swagger”
- 以及另一个使用HTTP且仅支持HTTP2用于gRPC连接的端口
"Kestrel": {
"Endpoints": {
"HttpsInlineCertFile": {
"Url": "https://localhost:5010",`enter code here`
"Protocols": "Http2"
}
//,
//"EndpointDefaults": {
// "Url": "http://localhost:5001",
// "Protocols": "Http2"
//}
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(Configuration)
.ConfigureKestrel(options =>
{
var (httpPort, grpcPort) = GetDefinedPorts();
options.Listen(IPAddress.Any, httpPort, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
listenOptions.UseHttps();
});
options.Listen(IPAddress.Any, grpcPort, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http2;
});
})
.UseStartup<Startup>();
private static (int httpPort, int grpcPort) GetDefinedPorts()
{
var grpcPort = Configuration.GetValue("GRPC_PORT", 5000);
var port = Configuration.GetValue("PORT", 5001);
return (port, grpcPort);
}