【问题标题】:MS Bot Framework V3 web chat/direct line issue - Internal Server Error 500MS Bot Framework V3 网络聊天/直线问题 - 内部服务器错误 500
【发布时间】:2019-03-27 17:41:09
【问题描述】:

我是 C# 和 Bot Framework (V3) 的新手,并被要求开始在我加入的项目中测试现有的机器人。 bot 本身在 Bot Emulator 上运行良好,并且在托管在 Skype 上时,但由于某种原因,Azure 上的网络聊天不起作用。由于网络聊天使用 Direct Line,它暂时停止了运行测试。我花了很多时间搜索 V3 Github 页面和 SO,但我一直无法找到解决方案。

对话似乎可以开始,因为 Bot 向用户发送消息,但未发送所有用户响应,并且 Bot 以错误消息“抱歉,我的 bot 代码有问题”进行响应。 见——

Azure 将其列为 500 错误 - 内部服务器错误。 见

Azure 中的错误消息

然后,我查看了 Chrome 开发工具选项卡中的消息,发现了相同的错误以及 502 错误,最近(或者我以前从未注意到)也出现了 CORS 错误。 见

Chrome 开发工具控制台

在此之后,我在 Azure 上使用了 Application Insights,当我尝试使用网络聊天时,每个实例都会有三个项目;

  • 一个 customEvent (StatusCode: 200),可能是 Bot 在对话开始时发送的消息。
  • issueId 为“System.Exception at Microsoft.Bot.ChannelConnector.BotAPI+d__31.MoveNext”的异常
  • 另一个 customEvent (StatusCode : 500)

由于我对 C# 和 Bot Framework 之间的整个设置不是很熟悉,因此我不确定问题出在哪里。这是异常消息的截图 -

单个 operationId 的消息

异常详情(一)

异常详情(二)

异常详情(三)

异常详情(4)

我对这些消息有一些想法:

  1. “外部程序集”被描述为“Microsoft.Bot.ChannelConnector, Version=3.2.2.5, Culture=neutral, PublicKeyToken=null” - 缺少 PublicKeyToken 是否意味着没有为用户分配令牌因为错误?还是应该先发生这种情况,然后因为用户没有令牌而发生错误?
  2. 堆栈跟踪指向其中一个对话框文件中的一行,但通过查看代码,我真的看不出问题出在哪里?我实际上删除了被标记的部分,但它只是将代码中问题所在的行更改为前一部分,所以我不确定这个文件是否存在问题?

如果有人对此有任何想法以及问题的原因可能是什么,我将不胜感激。

此外,我尝试做两件事来解决这个问题,但没有任何区别;

  • 确保在将配置文件发布到 Azure 时勾选“全部删除”框
  • 确保所有软件包都是最新的(包括安装 bot.connector.directline 软件包,由于某种原因尚未安装)

【问题讨论】:

  • 您是否使用部署槽进行测试?另外,bot 使用什么来管理状态(表存储、CosmosDb 等)?
  • 好的,感谢您提供的信息。这都是拼图的一部分。新问题:我看到引用“testboteurope”资源的 WebChat 错误(包括 CORS 错误)。但是,Application Insights 数据引用了“TestSlotNetHope”资源。您是否尝试从另一个资源访问一个资源?
  • 好的,我还建议您研究一些事情。一,检查你的机器人没有使用状态服务进行状态管理。我看到 State Store 调用此服务,但它在几个月前已被弃用。您可以在此处阅读有关状态服务和替代选项的更多信息:blog.botframework.com/2018/04/02/…
  • 另外,你提到让机器人在不同的部署槽中使用不同的应用服务。这很有可能是 CORS 问题的原因。主机网络聊天 URI 应作为受信任的来源添加到相关机器人的 Direct Line 通道中。导航到机器人,单击 Channels 边栏选项卡并选择 Direct Line。滚动到该页面的底部,然后在“增强的身份验证选项”下添加 URI 并单击完成。
  • 最后,北欧数据中心的 Direct Line 存在一些问题。这些错误持续了几个小时,并且与您的机器人的连接问题相吻合。

标签: c# botframework azure-bot-service


【解决方案1】:

因此,我的问题的解决方案是根据 Steven Kanberg 在上述 cmets 中的建议。虽然我们的状态管理一直在使用已弃用的版本(现已更新),但这是一个 CORS 问题,原因是机器人位于应用服务的不同部署槽中。一旦将应用服务的 URI 添加为受信任的来源,问题就解决了。感谢 Steven Kanberg 提供的所有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多