botframework – Microsoft Bot Framework:例外:数据已更改
我有一个机器人与以下对话场景:
>发送文本到LUIS private static async Task storeBotData(IDialogContext context,BotData userData) 在它调用另一个对话框后,再次使用context.Call(…). 我的问题是,在第一个对话框结束时更新用户数据(步骤3)时,我在Bot框架通道模拟器中有以下异常: `Exception: The data is changed [File of type 'text/plain']`... 这里发生了什么?我认为当一个对话框终止时,它会自己调用setUserData,但我不明白为什么我不能在代码中的任何地方更新userData … 我试图捕获异常,但没有任何东西被捕获..但我知道userData已更新,因为当我尝试检索它时,它被更新… 欢迎任何帮助:) 谢谢
Botframework在每次活动后恢复/保存会话状态,因此在典型流程下,典型流程如下所示:
[23:15:40] <- GET 200 getUserData [23:15:47] <- GET 200 getConversationData [23:15:47] <- GET 200 getPrivateConversationData ... [23:16:42] <- POST 200 setConversationData [23:16:42] <- POST 200 setUserData [23:16:42] <- POST 200 setPrivateConversationData 正如here所述:如果机器人的另一个实例已经更改了对象,则无法存储这些botData对象.所以在你的情况下,当框架自己调用setUserData并且发现BotData已经被更改(通过显式调用BotState.SetUserDataAsync)时,异常发生在对话框的终止处.我想这就是你无法捕捉异常的原因. 解: private static void storeBotData(IDialogContext context,BotData userData) { var data = context.UserData; data.SetValue("field_name",false); } 它的工作原理是我们修改了UserData的对象,但允许botFramework自己“提交”它,所以没有冲突 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |