【问题标题】:Bot published to Azure getting Internal Server Error发布到 Azure 的 Bot 出现内部服务器错误
【发布时间】:2018-12-01 22:34:44
【问题描述】:

所以我一直在使用 Bot Framework SDK v4 创建一个聊天机器人。我一直在本地对其进行测试,它在 Bot Emulator 上运行良好。

我希望能够在 Azure 上托管它并远程访问它,但是当我发布它并且浏览器打开我的 azurewebsites.net 网页时,该页面只显示一个错误提示 启动应用程序时发生错误.

当我查看控制台检查错误时,有 2 个资源请求加载失败:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) /favicon.ico:1 
Failed to load resource: the server responded with a status of 500 (Internal Server Error) (index):1

这是我第一次使用 Azure 或向 Azure 发布内容,所以我对它并不太熟悉。据我所知,我的本地目录中没有这些名称下的任何文件,我不确定如何解决这个问题。

关于造成这种情况的原因是什么?如果需要,我可以提供更多代码。

编辑 我从 Application Insights 和 Kudu 收集的更多信息。

当尝试使用“测试 Web 应用程序”向 Azure 中的机器人发送消息时,我收到了以下异常:

System.IO.FileNotFoundException: Could not find file 'D:\home\site\wwwroot\Chatbot.bot'.
 File name: 'D:\home\site\wwwroot\Chatbot.bot'
 at System.IO.FileStream.OpenHandle(FileMode mode, FileShare share, FileOptions options)
 at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
 at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
 at System.IO.File.OpenText(String path)
 at Microsoft.Bot.Configuration.BotConfiguration.<LoadAsync>d__31.MoveNext()
 --- End of stack trace from previous location where exception was thrown ---
 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
 at Microsoft.Bot.Configuration.BotConfiguration.Load(String file, String secret)
 at ChatBotProject.Startup.<>c__DisplayClass6_0.<ConfigureServices>b__0(BotFrameworkOptions options) in C:\Users\Marko\Documents\Project\ChatBotProject\ChatBotProject\Startup.cs:line 47
 at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
 at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
 at Microsoft.Extensions.Options.OptionsManager`1.<>c__DisplayClass5_0.<Get>b__0()
 at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
 at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
 at System.Lazy`1.CreateValue()
 at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
 at Microsoft.Extensions.Options.OptionsManager`1.Get(String name)
 at Microsoft.Extensions.Options.OptionsManager`1.get_Value()
 at Microsoft.Bot.Builder.Integration.AspNet.Core.ApplicationBuilderExtensions.UseBotFramework(IApplicationBuilder applicationBuilder)
 at ChatBotProject.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in C:\Users\Marko\Documents\Project\ChatBotProject\ChatBotProject\Startup.cs:line 122
 --- End of stack trace from previous location where exception was thrown ---
 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
 at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
 at Microsoft.AspNetCore.ApplicationInsights.HostingStartup.ApplicationInsightsLoggerStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
 at Microsoft.ApplicationInsights.AspNetCore.ApplicationInsightsStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
 at Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter.<>c__DisplayClass3_0.<Configure>b__0(IApplicationBuilder app)
 at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
 at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

此外,通过检查 Kudu 中的日志,该 html 对可能的原因进行了描述:

<fieldset>
<h4>Most likely causes:</h4>
<ul>
    <li>IIS received the request; however, an internal error occurred during the processing of the request. The
        root cause of this error depends on which module handles the request and what was happening in the worker
        process when this error occurred.</li>
    <li>IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS
        permissions are set incorrectly.</li>
    <li>IIS was not able to process configuration for the Web site or application.</li>
    <li>The authenticated user does not have permission to use this DLL.</li>
    <li>The request is mapped to a managed handler but the .NET Extensibility Feature is not installed.</li>
</ul>

【问题讨论】:

  • 您使用的是 Node.js 还是 .NET?你能看看使用 Kudu 的错误日志吗? (应用服务 -> Azure 中的高级工具,或者直接转到 [webapp-name].scm.azurewebsites.net。
  • 如果您正在运行 Node.js 机器人,请查看您当前在 Kudu 中的 Node 版本。如果要升级 Node 版本,请添加一个新的应用程序设置“WEBSITE_NODE_DEFAULT_VERSION”,例如值为 8.5.0。
  • 我正在使用 .NET。 Kudu 中“Log Streaming”下的错误日志?
  • 如果有帮助的话,我已经用更多信息更新了我的问题

标签: azure botframework publishing


【解决方案1】:
System.IO.FileNotFoundException: Could not find file 'D:\home\site\wwwroot\Chatbot.bot'.

您是如何将项目部署到 Azure 的?您的“Chatbot.bot”文件似乎没有部署到 wwwroot,这是必需的,并且可以包含机器人特定设置,例如应用程序 ID 和密码。

相关 StackOverflow 问题中的 answer 描述了如何在 Visual Studio 中部署后上传 .bot 文件,但您也可以手动将文件上传到 wwwroot。

【讨论】:

  • 我通过 Visual Studio 发布了它,只需右键单击我的项目并选择“发布”选项,它会引导您在 azure 上设置服务。我会尝试手动上传它
  • 这是 a known 'bug' / 某些机器人示例中的配置错误,应该在 Azure 门户的下一版本中修复。您可以通过查看上面链接的答案来手动解决此问题。无需手动上传。
  • 好的,谢谢您的帮助!我刚刚检查了我的 .bot 文件的属性,它们被设置为“请勿复制”,因此这可能是您链接的答案中提出的问题。我让你知道它是否有效
  • 解决了!谢谢你的帮助米克,你让我很开心!还发现我也没有为我的生产环境设置设置..但我解决了这个问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多