wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了botframework – Microsoft Bot Framework:例外:数据已更改大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个机器人与以下对话场景: >发送文本到LUIS > LUIS intent调用context.Call(…)来启动Dialog >此对话框终止,在userData中保存一些信息: private static async Task storeBotData(IDialogContext context,BotData userData) {     活动活动=(活动)context.Acti
我有一个机器人与以下对话场景:

>发送文本到LUIS
> LUIS intent调用context.Call(…)来启动Dialog
>此对话框终止,在userData中保存一些信息:

private static async Task storeBotData(IDialogContext context,BotData userData)
{
活动活动=(活动)context.Activity;
StateClient sc = activity.GetStateClient();
等待sc.BotState.SetUserDataAsync(activity.ChannelId,activity.From.Id,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自己“提交”它,所以没有冲突

大佬总结

以上是大佬教程为你收集整理的botframework – Microsoft Bot Framework:例外:数据已更改全部内容,希望文章能够帮你解决botframework – Microsoft Bot Framework:例外:数据已更改所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: