服务错误Bot应该使用自己的存储

问题描述 投票:0回答:1

我创建了bot(Bot Framework v3),它使用LUIS,QnAMaker,Dialogflow服务。当我在Bot仿真器中本地运行它时,它工作得很好,但当我在Azure上部署它时,我的机器人停止工作。表面上他只是回复抱歉,我的机器人代码存在问题,在应用程序的Settings-Web Chat刀片中有500个InternalServerError。

我尝试用ngrok调试,我得到一个异常操作返回一个无效的状态代码'MethodNotAllowed'与Microsoft.Bot.Connector.ErrorResponse消息Bot应该在我的MessageController中使用自己的存储方法await Conversation.SendAsync(activity, () => new RootDialog().DefaultIfException());

此外,在ConversationUpdate中处理的机器人要发送的第一条消息已成功发送给用户,没有任何错误。

我正在使用Azure表存储,我也尝试过InMemory存储。在我的机器人中还有一些使用本地数据库的工作。

我也有一个几个月前创建的网络应用程序机器人,我试图部署这个机器人,它工作正常。所以,我想也许我在这个新的网络应用程序机器人配置中遗漏了一些东西,或者还有其他一些我不知道的问题。我已经多次检查了所有的应用服务密钥。

任何帮助将不胜感激!

azure botframework dialogflow luis qnamaker
1个回答
2
投票

所以,我找到了解决方案。您必须确保在Global.asax文件中有这些代码行

builder.Register(c => store)
       .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
       .AsSelf()
       .SingleInstance();

builder.Register(c => new CachingBotDataStore(store,
         CachingBotDataStoreConsistencyPolicy
        .ETagBasedConsistency))
        .As<IBotDataStore<BotData>>()
        .AsSelf()
        .InstancePerLifetimeScope();

并使用Azure表存储或CosmosDb。

我刚刚没有使用CachingBotDataStore,它的缺席导致了错误。

© www.soinside.com 2019 - 2024. All rights reserved.