.net-core - 部署在本地服务结构上的 dotnet 核心应用程序引发 Microsoft 语音服务异常
问题描述
我有一个使用 Microsoft 认知语音服务版本 1.8.0 的 dotnet core 2.2 应用程序。该应用程序部署在单节点本地服务结构集群上。
我已经使用 Visual Studio 2019 添加了服务结构支持 右键单击根项目 -> 添加 -> Container Orchestrator Support -> Service Fabric
成功部署后,当我点击控制器 API 时,出现以下异常
> **System.DllNotFoundException: Unable to load DLL
> 'Microsoft.CognitiveServices.Speech.core.dll' or one of its
> dependencies: The specified module could not be found. (Exception from
> HRESULT: 0x8007007E)** at
> Microsoft.CognitiveServices.Speech.Dialog.Internal.DialogServiceConfig.bot_framework_config_from_subscription(IntPtr&
> config, String subscription, String region) at
> Microsoft.CognitiveServices.Speech.Dialog.BotFrameworkConfig.FromSubscription(String
> subscription, String region) at
> WebApi.Controllers.MyController..ctor() in MyController.cs:line 71
> at lambda_method(Closure , IServiceProvider , Object[] ) at
> Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass4_0.<CreateActivator>b__0(ControllerContext
> controllerContext) at
> Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass5_0.<CreateControllerFactory>g__CreateController|0(ControllerContext
> controllerContext) at
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State&
> next, Scope& scope, Object& state, Boolean& isCompleted) at
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
> at
> Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
> at
> Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext
> context) at
> Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next,
> Scope& scope, Object& state, Boolean& isCompleted) at
> Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
> at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
> at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext
> httpContext) at
> Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext
> httpContext) at
> Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext
> httpContext) at
> Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext
> context) at
> Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext
> context)
我可以在 dotnet core 应用程序中看到 docker publish 文件夹。Publish 文件夹具有包含本机 Microsoft.CognitiveServices.Speech.core.dll 和 Microsoft.CognitiveServices.Speech.extension.kws.dll的 win-x86 和 win-x64 运行时。
解决方案
如此处所述,我能够解决此问题。
看起来问题出在 VC++ 运行时。这些 dll 是使用 Microsoft Speech API 所必需的,但默认情况下不会复制到容器中。因此,我更新了我的 docker 文件以将 VC++ 运行时 dll 复制到容器中并且它工作正常。
推荐阅读
- google-sheets - Google表格:返回两个索引之间的INDEX()值切片的本机公式?
- eclipse-plugin - 无法将 LDT 安装到 Eclipse 2019-12 (4.14.0)
- javascript - jQuery 数据属性仅在第二次单击后更新
- node.js - 使用nodejs下载一系列文件时出现异步问题
- python-3.x - 将 STDOUT 提供给 stdout 会为 subprocess.run 返回 errno9
- asp.net-mvc - 如何隐藏 webgrid 的列我可以使用下面的代码隐藏 webgrid 的标题隐藏数据但列仍然在 UI 中显示为空白
- osgi-bundle - 如何将 maven jar 转换为 OSGI 包?
- javascript - 以角度在打字稿文件中添加html标签
- amazon-web-services - Terraform 将现有安全组添加到新的 Auto Scaling ec2 组
- command-line - 从文本文件 (openSSL x509) 导入主题字段?