如何从Azure表存储中获取聊天记录?

10

由于我们被迫放弃stateclient并转向自定义存储,我的情况下是使用Azure Table Storage。使用我的存储资源管理器,我可以看到它已经在我的Azure上保存了会话数据。如何更新我的ff代码以获取过去的聊天记录?之前我使用IActivityLogger类来记录对话,但现在我不知道如何更新它。

全局Asax之前:

protected void Application_Start()
{
    var builder = new ContainerBuilder();
    builder.RegisterType<Logger>().AsImplementedInterfaces().InstancePerDependency();
    builder.Update(Conversation.Container);
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

全局 Asax 之后:

protected void Application_Start()
{
    Conversation.UpdateContainer(builder =>
    {
        builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly()));
        var store = new TableBotDataStore(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
        builder.Register(c => store)
        .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
        .AsSelf()
        .SingleInstance();
    });

    GlobalConfiguration.Configure(WebApiConfig.Register);
}

日志记录器类:

public class Logger:IActivityLogger
{
    public static ConcurrentDictionary<string, List<IActivity>> Messages = new ConcurrentDictionary<string, List<IActivity>>();

    public Task LogAsync(IActivity activity)
    {
        try
        {
            var list = new List<IActivity>() { activity };
            Messages.AddOrUpdate(activity.Conversation.Id, list, (k, v) => { v.Add(activity); return v; });
            return Task.FromResult(false);
        }
        catch (System.Exception)
        {
            throw;
        }

    }
}

这是我如何使用它(我如何更新stateclient部分并在Azure上使用我的存储?

这是我如何使用它(如何更新stateclient部分并使用我的Azure存储)?
var reply = activity.CreateReply();
var storedActivities = new List<IActivity>();
var found = Logger.Messages.TryGetValue(activity.Conversation.Id, out storedActivities);
if (storedActivities != null)
{
    foreach (var storedActivity in storedActivities)
    {
        reply.Text += $" <br /> <b>{storedActivity.From.Name}:</b> {storedActivity.AsMessageActivity().Text}";
    }
    // Get any saved values
    StateClient sc = activity.GetStateClient();
    BotData userData = sc.BotState.GetPrivateConversationData(
    activity.ChannelId, activity.Conversation.Id, activity.From.Id);
    var UserEmail = userData.GetProperty<string>("Email");
    var Name = userData.GetProperty<string>("Name");
}

他们提供了一个新的tablelogger类,不幸的是我不知道如何使用它。 TableLogger.cs


3
这个问题混淆了StateClient和Logging。应该关闭此问题,因为提问者创建了一个更详细和准确的新问题:https://dev59.com/e6jja4cB1Zd3GeqP-Gfs - Nicolas R
activity.GetStateClient()将无法检索您的TableBotDataStore自定义状态客户端,而是使用默认状态客户端。请参见此处https://dev59.com/3KTja4cB1Zd3GeqPJ_a-,了解如何创建一个IBotDataStore <BotData>实例,该实例将使用您注册的TableBotDataStore。 - Eric Dahlvang
1个回答

0

Microsoft.Azure.Cosmos.Table目前处于维护模式,并将很快被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接