c# - Botframework:如何使用机器人处理长时间运行的任务?
问题描述
如何处理机器人上长时间运行的任务,以便客户端在 15 秒后再次尝试发送消息。
我得到了一个带有 botframework v3 的机器人,并将客户端与直线连接
解决方案
Direct Line通道连接器本身不会重试发送消息。如果它在向您的机器人发送消息后的 15 秒内没有收到确认,它将抛出Gateway Timeout。
如果您使用DirectLineClient,您可以覆盖重试策略,确保客户端不会重试消息:
DirectLineClientCredentials creds = new DirectLineClientCredentials(directLineSecret);
DirectLineClient directLineClient = new DirectLineClient(new Uri("https://directline.botframework.com"), creds);
directLineClient.SetRetryPolicy(new Microsoft.Rest.TransientFaultHandling.RetryPolicy(new Microsoft.Rest.TransientFaultHandling.HttpStatusCodeErrorDetectionStrategy(), 0));
如果您有一个长时间运行的进程,需要超过 15 秒,请考虑在某处将消息排队,以便您可以立即确认调用,然后在后台线程上处理消息。这在概念上称为主动消息传递。可以在此处找到更多信息:https ://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-proactive-messages?view=azure-bot-service-3.0
编辑:这篇博文还解释了一种在机器人中处理长时间操作的方法,方法是使用 Azure 队列存储和处理操作并在完成后调用机器人的 Azure 函数: 管理长时间运行的操作
另一种选择是在后台线程上处理传入消息或长时间处理消息。这个实验样本演示了一些使用这种设计的方法: Immediate Accept Bot
推荐阅读
- html - CSS 在网格中定位粘性侧边栏
- .net-core - 为生产禁用控制器 API 端点
- javascript - 设置最大边界不起作用传单
- c# - WPF C#:我的文本编辑器应该是文本文件的默认程序吗?
- c# - 如何在c#中确认进程关闭
- asp.net-mvc - 使用插件更改样式后,jquery 不再填充 MVC 5 选择下拉列表
- haskell - 在 Haskell 中查找给定树中的最大分支
- vuetify.js - 更改 vuetify UI 组件的基本语言
- amazon-dynamodb - CSV/parquet 到 Dynamo,约 50 万行的小文件,只有两列
- xcode - 调用 beginSheet:completionHandler 后如何等待工作表完成: