grpc-dotnet - 为什么我在尝试从编写 .net 核心的 gRPC 服务获取数据时收到 Grpc.Core.RpcException
问题描述
我有一个 gRPC 服务(用 .net core 3.1 编写)部署在 windows 服务器中,作为在 kerstel 中运行的自托管服务。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
},
"Endpoints": {
"HttpsInlineCertFile": {
"Url": "https://hostname:8081",
"Protocols": "Http2",
"Certificate": {
"Path": "path to .pfx file",
"Password": "Super secret password"
}
}
}
使用下面的代码
using GrpcChannel channel = GrpcChannel.ForAddress(httpsHost);
var client = new MyClient(channel);
var response = client.GetEntity(RequestCreator.GetRequest());
Console.WriteLine("Recieved: " + response.ToString());
我得到以下异常,内部异常为空。
Status(StatusCode=Internal, Detail="启动 gRPC 调用时出错:无法建立 SSL 连接,请参阅内部异常。")
我应该添加什么来让客户端从服务中获取数据吗?
提前致谢
解决方案
很抱歉我的问题回复晚了。问题是代理。我最终做的是创建一个 webproxy,将 gRPC 服务 url 添加到 bypassArrayList,创建 httpClientHandler,分配创建的 proyx,然后创建一个使用该 httpClientHandler 的 httpClient。
var proxy = new WebProxy
{
Address = new Uri(proxyServer),
UseDefaultCredentials = true,
BypassProxyOnLocal = true,
Credentials = CredentialCache.DefaultNetworkCredentials
};
proxy.BypassArrayList.Add(serviceUrl);
var httpClientHandler = new HttpClientHandler
{
Proxy = proxy,
DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials,
UseDefaultCredentials = true,
UseProxy = true,
};
var client = new HttpClient(httpClientHandler)
{
DefaultRequestVersion = HttpVersion.Version20
};
using var channel = GrpcChannel.ForAddress(serviceUrl, new GrpcChannelOptions
{
HttpClient = client
});
推荐阅读
- java - 将类导入 Eclipse IDE 问题
- r - Stargazer 只输出表头
- android - 输入错误的用户名时不会显示错误消息
- xml - XQuery/XPath:元素 id 在输出中丢失
- java - performClick() 方法不起作用,我得到一个错误
- matlab - 使用矢量化赋值时出现意外的 matlab 行为
- python - 图形未显示在 python 脚本的输出中
- python - 万亿次相对进口
- javascript - ScrollSpy 中的平滑滚动
- quarkus - 从 Quarkus 1.3.2.Final 迁移到 1.4.2.Final 影响 Vault 访问