Bot框架维护用户状态

时间:2018-03-03 01:32:29

标签: c# state botframework luis

以前我使用Microsoft状态服务来维护我的机器人中的用户状态。既然Microsoft已停止支持状态服务,我已经编写了一个静态对象来存储用户数据,如下所示。只是想知道这是维护用户状态的正确方法,因为大约有8000个用户可能正在使用该应用程序。我只是担心它会导致一些并发。请建议是否有更好的方法在bot框架中维护用户状态

    private static object objectLock = new object();
    public void SetBotCache(T CaceData, string userID)
    {

  _sessionData.AddOrUpdate(userID, CaceData, (key, oldValue) => CaceData);

    }

    public T GetBotCache(string userID)
    {
        lock (objectLock)
        {
            if (_sessionData.Count > 0)
            {
                return _sessionData.First(a => a.Key == userID).Value;
            }
            else
            {
               return default(T);
            }
        }
    }

    public void RemoveCache(string userID)
    {
        lock (objectLock)
        {
            T res;
            _sessionData.TryRemove(userID, out res);
        }
    }

2 个答案:

答案 0 :(得分:1)

Microsoft Bot Framework工程师专门为此目的提供了 BotBuilder-Azure https://github.com/Microsoft/BotBuilder-Azure https://www.nuget.org/packages/Microsoft.Bot.Builder.Azure/

Bot Framework博客还提供了有关如何设置 Azure表存储 DocumentDb (现在 CosmosDb )的说明: https://blog.botframework.com/2017/07/18/saving-state-azure-extensions/

答案 1 :(得分:0)

  

我编写了一个静态对象来存储用户数据,如下所示。只是想知道这是维护用户状态的正确方法,因为大约有8000个用户可能正在使用该应用程序。

您似乎实现了用于存储机器人用户数据的内存缓存,该方法可用于测试目的。我们知道,内存中存储的数据是非持久性的,如果僵尸程序应用程序重启或崩溃,缓存的数据将会丢失,因此不建议用于生产环境。

您说您的机器人应用程序将在生产服务器上发布,大约有8000名用户使用。正如Eric Dahlvang所提到的,在生产环境中,您可以使用Azure Extensions将bot's state data存储在Table Storage,CosmosDB或SQL中。