c# - Bot Framework - 防止 GatewayTimeout 长时间操作
问题描述
我已经使用botframework
V4 for .Net 构建了一个机器人,它可以回复用户的电子邮件和直接渠道。
但是,有些请求需要超过 15 秒才能完成,因此我会收到一个GatewayTimeout
错误:
这些请求很繁重(从数据库中获取一些数据,通过 API 调用从另一个服务器获取其他数据,处理数据,生成 HTML 并将它们发送回用户......)因此无法缩短流程。
我知道网关超时延迟是设计使然(15 秒),但问题是通道会在一小段时间后自动重试请求,我最终会收到多封电子邮件以获取相同的查询(大约 1 分钟)分开)。
我还注意到,直接回复比电子邮件回复快得多(websocket vs SMTP),因此这主要发生在电子邮件通道中。请注意,根据此评论,电子邮件保持在 300KB以下,但大小很容易接近此限制。
因此,有没有办法:
- 增加超时延迟?
- 禁用自动重试?
- 或者也许是某种解决方法来防止这个问题?
解决方案
请记住,您的机器人是一个公开 HTTP 端点的 Web 应用程序,发送到您的机器人的每个活动都是一个 API 调用。长时间运行的 API 调用应设计为立即返回响应并异步进行处理。例如,考虑识别文本计算机视觉 API。它只是返回一个操作位置,实际结果将在以后可用。
对于 bot Framework 机器人,在回合结束后向频道发送消息所需要做的就是发送主动消息。设计您的机器人以向用户指示结果即将到来通常也是一个好主意,例如通过发送初步的“处理”消息或键入指示符,但在电子邮件通道的情况下这可能是不需要的。Eric Dahlvang 在您链接到的问题中解释了这一点:
如果开发人员知道响应将花费超过 15 秒,则可以根据通道启动单独的线程来处理长时间运行的进程,在接收线程上返回有效的状态码,当进程完成时,从后台线程发送主动消息。
推荐阅读
- ios - 在 ionic 2 中运行 Cordova 时发生错误
- batch-file - WinSCP在目录同步成功后删除特定文件夹中早于特定日期的源文件
- java - JAR 使用终端执行,但不直接单击
- math - 在飞镖中计算超椭圆形状
- node.js - Istio 的 JWT 用户认证服务
- javascript - 有没有办法使用从 mysql 数据库中获取的信息来显示实时计算?
- excel - 在 2 个日期范围之间过滤
- oracle - 使用 Flyway 对 Oracle 数据库进行逆向工程
- java - 相机 "位图 imageBitmap = (Bitmap) extras.get("data");" 给出 Nullpointer 错误
- php - 输出表上方的尴尬空白