我在MS Bot Framework项目中使用Azure存储。 我已经在this article中了解了机器人内部服务的配置,我已经正确地将其应用于我的项目。我知道有这些原语用于访问和使用会话/用户/ ...数据(描述here)。问题是最后一页描述的方法都是过时的和无用的。我想知道是否有办法将这些旧方法也用于azure存储,或者有类似的方法来使用它,或者我被迫使用原始的Azure存储方法来访问这些数据(如this) ,因为在MS文档中我只发现了如何配置存储而不是如何使用它。
答案 0 :(得分:1)
您可以使用3 databags
来存储州数据。它们位于context
对象中。它们是UserData
,ConversationData
和PrivateConversationData
至于如何访问它们(获取/设置),这取决于您尝试从哪里获取数据。如果您在消息控制器中(无法访问上下文对象),则必须执行以下操作:
var message = activity as IMessageActivity;
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botDataStore = scope.Resolve<IBotDataStore<BotData>>();
var key = Address.FromActivity(message);
ConversationReference r = new ConversationReference();
var userData = await botDataStore.LoadAsync(key, BotStoreType.BotUserData, CancellationToken.None);
//set state data
userData.SetProperty("key 1", "value1");
userData.SetProperty("key 2", "value2");
//get state data
userData.GetProperty<string>("key 1");
userData.GetProperty<string>("key 2");
await botDataStore.SaveAsync(key, BotStoreType.BotUserData, userData, CancellationToken.None);
await botDataStore.FlushAsync(key, CancellationToken.None);
}
在对话框中或当您有权访问上下文对象时,它就像
一样简单context.UserData.SetValue("KEY ONE", "value1");
context.UserData.GetValue<string>("KEY ONE");