Диалоговое окно - Обнаружение намеренного замораживания - C# - PullRequest
0 голосов
/ 15 января 2020

Я настроил агент диалогового потока и пытаюсь написать C# код для интеграции с ним. Но моя проблема в том, код просто зависает при использовании этого метода: DetectIntent.

Вот пакеты Google NuGet, которые я установил в своем проекте:

  • Google.Api.CommonProtos (v1 .7.0)
  • Google.Api.Gax (v2.10.0)
  • Google.Api.Gax.Grp c (v2.10.0)
  • Google.Api. Gax.Rest (v2.10.0)
  • Google.Apis (v1.43.0)
  • Google.Apis.Auth (v1.43.0)
  • Google.Apis.Core ( v1.43.0)
  • Google.Apis.Dialogflow.v2 (v1.40.2.1612)
  • Google.Apis.Storage.v1 (v1.43.0.1791)
  • Google.Cloud.Dialogflow.V2 (v1.2.0)
  • Google.Cloud.Language.V1 (v1.4.0)
  • Google.Cloud.Storage.V1 (v2.5.0)
  • Google.LongRunning (v1.1.0)
  • Google.Protobuf (v3.11.2)
  • Grp c .Auth (v1.22.1)
  • Grp c .Core (v1.22.1)
  • Grp c .Core.Api (v2.26.0)

Затем я перешел по этой ссылке для аутентификации: https://cloud.google.com/docs/authentication/production

Итак, я сделал этот метод:

public static Grpc.Core.Channel AuthExplicitForChannel(string theProjectID, string theServiceAccountJSONFilePath)
{
    GoogleCredential googleCredential = GoogleCredential.FromFile(theServiceAccountJSONFilePath).CreateScoped(LanguageServiceClient.DefaultScopes);
    Grpc.Core.Channel mainChannel = new Grpc.Core.Channel(LanguageServiceClient.DefaultEndpoint.ToString(), googleCredential.ToChannelCredentials());
    return mainChannel;
}
* 105 1 * При этих значениях:
using Grpc.Auth;
using Google.Protobuf;
using Google.LongRunning;
using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dialogflow.V2;
using static Google.Cloud.Dialogflow.V2.Intent.Types;
using Google.Cloud.Language.V1;
using Google.Cloud.Storage.V1;
using Google.Apis.Dialogflow.v2.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Storage.v1.Data;

Затем я перешел по этой ссылке: https://cloud.google.com/dialogflow/docs/quick/api#detect -intent-text-csharp

Затем я сделал этот код:

...

// Session
Grpc.Core.Channel mainChannel = DialogflowManipulation.AuthExplicitForChannel(projectID, serviceAccountKeyJSONFilePath);
SessionsClient mainSessionsClient = SessionsClient.Create(mainChannel);
SessionName mainSessionName = new SessionName(projectID, sessionID);

// Input
TextInput mainTextInput = new TextInput() { Text = text, LanguageCode = languageCode };
QueryInput mainQueryInput = new QueryInput() { Text = mainTextInput };

// Detect Intent
DetectIntentResponse response = mainSessionsClient.DetectIntent(mainSessionName, mainQueryInput);

...

Я обнаружил, что при просмотре «Отладка - Вывод» в режиме отладки «Вывод» печатает это после / во время зависания:

Исключение: «System.MissingMethodException» в Grp c .Core.dll

Выполнение просто зависает в последней строке .DetectIntent.

Где я иду не так?

Любая помощь / совет будет оценено.

1 Ответ

2 голосов
/ 15 января 2020

Я обнаружил проблему:

Проблема заключалась в том, что версии пакетов, которые я установил, были неправильно совместимы.

Мой Grp c .Core был включен (v1.22.1) , но мой Grp c .Core.Api был включен (v2.26.0) . Когда я изменил свою версию Grp c .Core.Api на (v1.22.1) и попытался снова; моя система больше не зависала, и я получил ответ. Я также больше не получал вывод «Отладочный вывод»: Exception thrown: 'System.MissingMethodException' in Grpc.Core.dll.

Благодарю Мара c Асмара за ваши полезные комментарии и ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...