Почему я получаю исключение Grp c .Core.RpcException при попытке получить данные из записанной службы gRP C. net core - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть служба gRP C (написано в. net core 3.1), развернутая на windows сервере как самостоятельная служба, работающая в kerstel.

enter image description here Я добавил приведенную ниже конфигурацию, чтобы служба работала в https.

"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());

Я получаю исключение ниже, а внутреннее исключение равно нулю.

Состояние (StatusCode = Internal, Detail = "Ошибка запуска gRP C вызов: не удалось установить соединение SSL, см. Внутреннее исключение.")

enter image description here

Что мне нужно добавить, чтобы клиент получил данные от службы?

Заранее спасибо

1 Ответ

0 голосов
/ 18 февраля 2020

Извините за поздний ответ на мой вопрос. Проблема была в прокси. В итоге я создал веб-прокси, добавил URL-адрес службы gRP C в bypassArrayList, создал httpClientHandler, назначил созданный proyx, а затем создал httpClient, который использует этот httpClientHandler.

        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
        });
...