在 Bot Framework Emulator 中多次从一个对话框移动到另一个对话框时出现错误“已超出读取器的 MaxDepth 64”

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

多次从一个对话框移动到另一个对话框甚至在同一对话框中循环时会出现此问题。在同一个对话框中循环 9 次并包含许多提示后。来自“OnTurnError”的错误

value:"The reader's MaxDepth of 64 has been exceeded. Path 'DialogState.dialogStack.$values\[0\].
state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].s
tate.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].
state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].
state.dialogs.dialogStack.$values\[0\].state.dialogs.dialogStack.$values\[0\].state.options.Prompt.attachments.$values'."

我尝试清空堆栈,更改 MaxDepth 但没有任何改变。有没有什么方法可以管理带有许多提示的长时间对话而不会出现此错误。

c# botframework botframeworkemulator
2个回答
0
投票

当我为 ReplaceDialogAsync 方法传递对话框 Id 参数时,该方法使用 InitialDialogId 启动循环,该循环等于 nameof(WaterfallDialog) 而不是 nameof(ReviewSelectionDialog) (我想要重复的对话框的名称),机器人正常运行。但我还是不知道为什么新代码可以正常工作!

  • 之前的代码
return await stepContext.ReplaceDialogAsync(nameof(ReviewSelectionDialog), userProfile, cancellationToken); 
  • 已修改
return await stepContext.ReplaceDialogAsync(InitialDialogId, userProfile, cancellationToken); 

0
投票

我的两分钱:更改 MaxDepth 对我来说也不起作用,直到我将机器人框架版本升级到 4.19.0 或更高版本。

<PackageReference Include="Microsoft.Bot.Builder.Dialogs" Version="4.19.0" />

完成此操作后,示例代码确实有效。

services.AddHttpClient().AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.MaxDepth = HttpHelper.BotMessageSerializerSettings.MaxDepth;
});
© www.soinside.com 2019 - 2024. All rights reserved.