Google Cloud API не возвращает никакого ответа - PullRequest
0 голосов
/ 06 июня 2018

Справочная информация:
Я пытаюсь создать PoC для API Google Cloud Vision, используя их .NET-библиотеку .

Что я сделал:
Созданиепростые консольные приложения со следующим кодом для Vision API.

GoogleCredential credential = GoogleCredential.FromFile(ConfigurationManager.AppSettings["GoogleCredentialFile"]);
Grpc.Core.Channel channel = new Grpc.Core.Channel(Google.Cloud.Vision.V1.ImageAnnotatorClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
var client = Google.Cloud.Vision.V1.ImageAnnotatorClient.Create(channel);

var image = Google.Cloud.Vision.V1.Image.FromFile(@"C:\Users\u065340\Documents\sample.jpg");
var response = client.DetectLabels(image);
foreach (var annotation in response)
{
    if (annotation.Description != null)
    result = annotation.Description;
}

Проблема:
Строка client.DetectLabels(image) застревает на долгое время, прежде чем в конечном итоге выдает ошибку Deadline Exceeded.
Мой код находится за корпоративным прокси, но я проверил, чтоон не блокирует доступ в интернет, потому что я могу позвонить по номеру https://vision.googleapis.com/$discovery/rest?version=v1 из тех же приложений и получить ответ JSON просто отлично.
Есть предложения?

1 Ответ

0 голосов
/ 07 июня 2018

После изучения проблем github, связанных с прокси-серверами, как это было предложено Джоном Скитом, я обнаружил, что API-интерфейсы Google Cloud Client обычно можно разделить на 2 категории (ссылка: здесь ): HTTP 1.1 на основе REST сJSON и gRPC.
Для API, связанных как основанные на REST, не должно быть проблем с прокси.Проблема начинает появляться, когда мы используем API на основе gRPC, такие как Google Cloud Vision и Google Speech.В gRPC нам нужно явно предоставить информацию о нашем прокси-сервере.

Для тех, кто использует Java Client, кажется, что мы все еще не можем правильно установить прокси, потому что он в конечном итоге будет проигнорирован, что приведет к ошибке Deadline Exceeded.Эта проблема уже хорошо известна и может быть найдена в здесь и далее прослежена до здесь .
Команда Google определила, что это действительно ошибка, и статус остается Открытым,

Что касается клиента C #, мы можем установить информацию о прокси, используя переменные среды gRPC, которые описаны в здесь .Код Environment.SetEnvironmentVariable("http_proxy", <your_proxy_server>);
После того, как я установил переменную окружения http_proxy, указывающую на мой прокси-сервер, все снова в порядке.Я получаю ожидаемый вывод «Для этого API требуется платежный аккаунт».

Большое спасибо Джону Скиту за то, что он указал мне правильное направление: D

...