Bot框架 - 对话框之间的Botstate丢失了值

时间:2016-11-08 14:02:04

标签: c# botframework

我试图在不同的对话框之间传递状态,并且似乎是a)没有正确调用对话框或b)没有正确使用botstate(或两者)。

当我打开第二个对话框时,有人能告诉我我失去了什么吗?它使用context.forward();

打开

在messagescontroller中,我可以轻松设置状态;

StateClient stateClient = activity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
userData.SetProperty<bool>("SessionActive", true);
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);

然后我打开一个控制对其他对话框的访问的对话框;

await Conversation.SendAsync(activity, () => new DialogController());

这是一个单独的类;

public class DialogController : IDialog<object>

在此对话框中,我可以访问我设置的值&#39; true&#39; - 这有效;

StateClient stateClient = new StateClient(new Uri(message.ServiceUrl));
BotData userData = await stateClient.BotState.GetUserDataAsync(message.ChannelId, message.From.Id);
userData.GetProperty<bool>("SessionActive")

但是,在此对话框中,我继续打开第二个依赖于状态的对话框;

await context.Forward(new SubDialog(), ThrowOutTask, message, cts.Token);

这也是一个单独的类;

public class SubDialog: IDialog<object>

然而,当我尝试检索“SessionActive”时, state,与以前完全相同,值为false(即第一次实例化)..?

1 个答案:

答案 0 :(得分:0)

当您从Dialog类请求状态时,您应该使用上下文来完成。

bool sessionActive = context.UserData.Get<bool>("SessionActive");