【发布时间】:2018-01-24 12:04:45
【问题描述】:
我已经使用 Google Speech 库创建了一个将 Speech to text 的 web api 方法。当我使用 Visual Studio 执行时,它工作正常。在 IIS 上托管应用程序后,调用 api 方法时出现以下错误
Method:Status(StatusCode=Unauthenticated, Detail="Getting metadata from plugin failed with error: Exception occurred in metadata credentials plugin.")
代码行出错:
var speechResponse = speech.Recognize(SpeechConfig,
RecognitionAudio.FromFile(fileToProcess));*
在另一个系统上,我已经使用服务帐户 json 配置了 GOOGLE_APPLICATION_CREDENTIALS env 变量,但出现以下错误
应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,它们就可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。
【问题讨论】:
-
在您的第一个系统中,您是否指定
GOOGLE_APPLICATION_CREDENTIALS?在第二个系统上,如果你设置了环境变量,你真的,真的不应该得到那个错误。您能否为Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS")添加日志记录以检查它是否真的是您所期望的? -
此外,我希望在第一个异常中看到一些其他信息,这通常会提供有关凭据插件中出了什么问题的详细信息。不过,单独处理每个系统可能最简单,因为它们的行为不同。
-
在两个系统上,GOOGLE_APPLICATION_CREDENTIALS 环境变量都指向 Json 文件。能够使用 Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS") 获得价值。
-
在那种情况下,我不明白你会如何结束这个错误 - 请参阅github.com/google/google-api-dotnet-client/blob/master/Src/…。如果设置了环境变量,则应该不可能归结为引发该异常的代码。当您说您能够获得价值时-您是指在相同的应用程序代码中吗?您可能希望通过调用
GoogleCredential.GetApplicationDefault()来简化诊断。 -
我能够通过在服务器上初始化 gcloud 来解决第二个问题“应用程序默认凭据不可用。”
标签: c# google-speech-api