【问题标题】:Bot works in Bot Framework Emulator on local computer, but not after it's deployed to Microsoft Azure: "HTTP status code NotFound" (2nd Thread)Bot 在本地计算机上的 Bot Framework Emulator 中运行,但在部署到 Microsoft Azure 后无法运行:“HTTP 状态代码 NotFound”(第二个线程)
【发布时间】:2019-11-09 20:54:57
【问题描述】:

这是我关于这个问题的第二个帖子,我尝试了上一个帖子中提供的关于这个问题的每一个建议。最后一个帖子的 URL 在这里:Bot works in Bot Framework Emulator on local computer, but not after it's deployed to Microsoft Azure - HTTP status code NotFound

我按照https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-deploy-az-cli?view=azure-bot-service-4.0&tabs=newrg 的确切指示进行操作。

按照这些涉及 Azure CLI 的说明进行操作后,我在 Azure 订阅 ID 下创建了三种资源类型:机器人频道注册、应用服务和应用服务计划。

不幸的是,当我在“机器人管理”下的“网络聊天测试”窗口中为“机器人频道注册”资源输入一条消息时,我收到一条消息,说“无法发送重试”。

当我转到“机器人频道注册”资源的“机器人管理”下的频道时,单击“健康”下的“问题”,我看到此消息:“向您的机器人发送此消息时出错:HTTP 状态代码 InternalServerError。”

以下是上一个帖子中突出显示的一些其他详细信息。正如您将在下面阅读的那样,我绝对考虑到了它们。

在输入此代码之前,在机器人的目录中创建了一个“.deployment”文件,随后创建了一个包含“.deployment”文件的 zip 文件: az webapp deployment source config-zip --resource-group "" --name "" --src "code.zip"

我访问了此链接,在“WWWROOT”部分下的该页面上看到了 21 个 .dll 文件: https://.scm.azurewebsites.net/dev/wwwroot/

我访问了这个 URL (https://.scm.azurewebsites.net/dev/wwwroot/:vs.output),按下运行,我没有在屏幕右侧的“输出”下看到任何异常.在“单击 http://.azurewebsites.net 以打开您的站点 2019-06-27T17:52:04 PID[32228] 信息发送响应”之后的“输出”下的最后一条消息中显示“200.0 OK”。当我单击“http://.azurewebsites.net”链接时,会打开一个新选项卡,我会在顶部看到这条消息:“Bot Started。”

我也尝试过从 Visual Studio 发布。

当我尝试从 Visual Studio 发布时,我按照此页面上的说明进行操作: https://docs.microsoft.com/en-us/visualstudio/deployment/deploying-applications-services-and-components?view=vs-2019

我创建了一个新的 Azure 应用服务,选择了正确的订阅和资源组,关闭了 Application Insights,因为现在不需要它,然后按下“创建”。

然后我按下“发布”。

接下来,我创建了一个机器人频道注册,并从 Visual Studio 中“发布”屏幕顶部的编辑链接添加了目标 URL。在网络聊天中进行测试时,该机器人无法正常工作。

在此阶段在 Azure 中创建 Web 应用程序机器人没有帮助,因为创建似乎需要默认回显或基本机器人模板。

再次详细说明,我尝试在 Azure 中测试的机器人在 Visual Studio 中运行后在机器人模拟器中完美运行。在 Azure 的发布/部署阶段的某个地方存在一个问题。我们可以做些什么来解决这个问题?


更新:

我听从了 Matt Stannett 的建议,他在这个帖子下添加了评论。

我去了监控 > 应用服务日志并启用应用程序日志记录(文件系统)以及详细的错误消息和失败的请求跟踪。

接下来,我转到了监控 > 日志流选项卡。我一直打开这个选项卡并在另一个选项卡中加载网络聊天以查看实时日志。

我将html代码转换为pdf格式并读取结果。

以下是有关错误消息的顶级信息:

HTTP 错误 500.0 - 内部服务器错误

由于发生内部服务器错误,页面无法显示。

最可能的原因:

  • IIS 收到请求;然而,一个内部错误发生在 请求的处理。此错误的根本原因取决于 在哪个模块上处理请求以及在哪个模块上发生了什么 发生此错误时的工作进程。
  • IIS 无法访问网站的 web.config 文件或 应用。如果设置了 NTFS 权限,则可能会发生这种情况 错误。
  • IIS 无法处理网站或应用程序的配置。
  • 经过身份验证的用户没有使用此 DLL 的权限。
  • 请求映射到托管处理程序,但 .NET 可扩展性 未安装功能。

您可以尝试的方法:

  • 确保 web.config 文件的 NTFS 权限正确 并允许访问 Web 服务器的计算机帐户。
  • 检查事件日志以查看是否记录了任何其他信息。
  • 验证 DLL 的权限。
  • 如果请求映射到托管处理程序,请安装 .NET 可扩展性功能。
  • 创建跟踪规则以跟踪此 HTTP 状态代码的失败请求。有关为失败的请求创建跟踪规则的更多信息,请单击此处。

详细错误信息:

错误代码:0x00000000

模块:AspNetCoreModule

处理程序:aspNetCore

通知:ExecuteRequestHandler

登录方式:匿名

登录用户:匿名

更多信息:

此错误表示处理请求时出现问题。 Web 服务器收到了请求,但在处理过程中发生了致命错误,导致 500 错误。 View more information »

【问题讨论】:

  • 我建议为您的机器人打开 Application Insights,因为它有助于找到底层错误。或者,在您的应用服务上,您可以转到监控 > 应用服务日志并启用应用程序日志记录(文件系统)以及详细的错误消息和失败的请求跟踪。然后您可以转到监控 > 日志流选项卡,一旦此选项卡打开,您应该在另一个选项卡中加载网络聊天,您将能够看到实时日志。收到错误消息后,您应该更新您的问题。
  • 非常感谢,马特。我遵循了这些步骤,并将错误消息中的详细信息包含在原始线程底部的日志流部分中。
  • 嗯,没有更多的见解。您必须远程调试网络聊天才能看到它发生了什么。我在“调试技术”部分下的回答 here 中概述了此过程 - 黄色区域主要是您感兴趣的区域。
  • 嗨,马特。非常感谢您指导我完成这些步骤。我对其中两个步骤有疑问。在“在 Visual Studio 中将 appId 和 appPassword 键值对从 .bot 文件中的生产端点复制到开发端点”这一步中,我将在 appsettings.json 文件中输入“MicrosoftAppId”和“MicrosoftAppPassword”,然后没有别的地方吗?我只是想确定一下。另外,在“确保开发端点的端点值设置为本地主机 URL (localhost:3978/api/messages)”中,我究竟会在哪里更改端点值?跨度>
  • 此外,截至今天,当我在 Visual Studio 中运行任何机器人时......当我尝试使用我在进行建议配置之前的设置在机器人模拟器中测试机器人时会发生这种情况更改:以“localhost:3978”作为 URL 的浏览器选项卡启动。我在此选项卡顶部看到一条文本,上面写着“QnA Prompting Bot Started”。这是我部署到 Azure 的机器人模板,但无论我在 Visual Studio 中运行任何机器人以在机器人模拟器中进行测试,我都会看到此消息。我尝试在机器人模拟器中测试的每个机器人都没有响应——可能是因为端点设置。

标签: visual-studio azure botframework bots


【解决方案1】:

这里只是快速澄清一下,因为似乎有两个不同的问题:

  1. 您的 Bot Framework Emulator 实例似乎有问题 - 我建议您将其卸载,然后从 here 获取最新版本。

  2. 您的机器人无法在生产环境中工作 - 为了在本地调试生产渠道,您需要确保应用设置中的应用 ID 和应用密码填充了来自 Azure 的值,那么您应该能够按照下面的其余说明在生产频道(模拟器中的 Teams、WebChat、DirectLine 等 NOT)聊天,并让生产频道针对您的本地代码运行,以便您可以设置断点并检查变量以调试问题所在。

基于指南herehere的说明:

调试技术

  • 确保机器人在本地运行。
  • 通过 Kudu 在开发工具 > 应用服务的高级工具下检查日志流或日志文件。您还可以在监控应用服务日志下为您的应用服务打开 Application logs,然后在另一个选项卡/窗口中的网络聊天中测试您的机器人时,通过应用服务的日志流部分查看日志流。
  • 检查App Settings 条目是否存在且正确(密码、应用ID 等)。
  • 确保已安装 ngrok。
  • 在 Visual Studio 中打开解决方案。
  • 在 Visual Studio 中开始调试。
  • 记下打开网页的 localhost 地址中的端口(应该是 3978)。
  • 导航到解压 ngrok 的目录。
  • 在地址栏中输入 cmd 并按回车键打开一个新的命令提示符窗口。
  • 创建一个可公开访问的 URL,将指定端口上的所有 http 流量通过隧道传输到您的计算机:
  • ngrok http 3978 --host-header=localhost
  • 复制 https 转发 URL。
  • 格式应为https://(characters-here).ngrok.io
  • 保持运行 ngrok 的命令提示符窗口打开,因为一旦关闭,该 URL 将无法再访问。
  • 停止调试。
  • 在 Azure 门户中打开 Web App Bot 资源。
  • 转至机器人管理 > 设置 > 配置,然后将 URL 复制到描述字段中,以便将其保存在某处。
  • 将端点 URL 文本框中 /api/messages 之前的所有内容替换为 ngrok URL。
  • 最终到达网址的格式应为https://(ngrok-url)/api/messages
  • 单击“保存”(您可以在文本框外单击以启用“保存”按钮)。
  • 转到应用服务 > 设置 > 配置并记下 MicrosoftAppId 和 MicrosoftAppPassword 的值。
  • 在 Azure 门户中,在 App Service Visual 的配置 > 应用程序设置选项卡下,将 MicrosoftAppId 和 MicrosoftAppPassword 条目的值复制到 appsettings.json 文件中的匹配条目中(因为您将针对本地运行生产端点您需要设置所有相关键的代码)。
  • 在 Visual Studio 中保存更改。
  • 在 Visual Studio 中开始调试。
  • 在 Azure 的网络聊天中打开测试。
  • 测试机器人功能。
  • 应该点击您在代码中设置的任何断点。

清理步骤 - 重要!!!

  • 将 Azure 中 Web App Bot 的消息传递端点 URL 恢复为其原始值并保存更改。
  • 撤消/恢复对 appsettings.json 文件的任何更改。
  • 关闭运行 ngrok 的命令提示符窗口。
  • 关闭 Bot Framework 模拟器

【讨论】:

  • 感谢您提供详细而有见地的建议。我尝试了所有步骤。不幸的是,在完成所有这些并在网络聊天中测试我的机器人之后,机器人没有响应。我在命令行窗口中看到这条消息:“POST /api/messages 404 Not Found”。此外,日志流似乎根本没有检测到我的机器人,并继续说“过去 ___ 分钟内没有新的跟踪”。在 bot 的 Channels 窗口中,我继续看到此错误消息:“向您的 bot 发送此消息时出错:HTTP 状态代码 NotFound。”
  • 我仍在设置和使用 Kudu 的过程中,以防有助于澄清为什么会出现这些问题以及可以采取哪些措施来纠正这些问题。
  • 听起来检索/压缩步骤中出了点问题。确保从说明中指定的正确目录进行压缩。= here。如果这仍然不起作用,那么我将通过 Azure 门户创建一个 echo bot,然后按照步骤 here。您想要执行以下操作:
  • 1.在 Azure 门户中创建回声机器人。 2. 使用网络聊天测试回声机器人。 3. 从门户下载代码(概述 > 构建/代码将获得您的 zip)。 4. 创建一个 Azure DevOps 帐户(它是免费的) 5. 为您的机器人创建一个项目和 repo。 6. 查看空仓库。 7. 将 echo bot 代码解压缩到 repo 中。 8. 提交并推送您的更改。 9. 按照上面的链接设置构建管道。 10. 按照上述设置发布管道,但部署到您现有的应用服务(使用 echo bot 创建)。 11. 手动触发构建(也应自动触发发布)。
  • 12.成功部署发布后,再次在网络聊天中测试您的回声机器人。 13. 在任务/步骤下的发布管道中,确保删除目标位置的附加文件选项为enabled 14. 删除 PC 上存储库中的所有 echobot 文件。 15. 将要部署的机器人中的文件复制到存储库中。 16. 提交并推送您的更改。 17. 应自动触发构建和发布。 18. 发布完成后测试机器人功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2017-05-20
  • 1970-01-01
  • 2017-08-29
相关资源
最近更新 更多