我创建了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存储。在我的机器人中还有一些使用本地数据库的工作。
我也有一个几个月前创建的网络应用程序机器人,我试图部署这个机器人,它工作正常。所以,我想也许我在这个新的网络应用程序机器人配置中遗漏了一些东西,或者还有其他一些我不知道的问题。我已经多次检查了所有的应用服务密钥。
任何帮助将不胜感激!
所以,我找到了解决方案。您必须确保在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,它的缺席导致了错误。