我最近为许多用户部署了一个漫游器。有时,当我致电EndDialogAsync()
时,我会收到BadRequest错误。
这是我的堆栈跟踪记录:
Microsoft.Bot.Schema.ErrorResponseException
Operation returned an invalid status code 'BadRequest'
Bot.CustomPrompts.CustomPrompt in OnPromptAsync at line 37:17 within BasicBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Called from: System.Runtime.ExceptionServices.ExceptionDispatchInfo in Throw within System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
Bot.Dialogs.Tour.TourDialog+<>c__DisplayClass0_0+<<-ctor>b__10>d in MoveNext at line 512:17 within BasicBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Called from: System.Runtime.ExceptionServices.ExceptionDispatchInfo in Throw within System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
TourDialog的512行是:
return await stepContext.EndDialogAsync();
CustomPrompt的第37行是:
await turnContext.SendActivityAsync(options.Prompt, cancellationToken).ConfigureAwait(false);
似乎对话框已结束,因此stepContext应该不再存在。 CustomPrompt是一个自定义类,用于在botframework v4(可在Adaptive Card response from a WaterfallStep Dialog MS Bot framework v4中找到)中实现AdaptivePrompts。我根本不知道为什么要调用CustomPrompt,因为对话框应该已经结束。
答案 0 :(得分:1)
您必须记住,EndDialogAsync
只会从堆栈中弹出一个对话框,因此,如果堆栈上还有其他对话框,那么最上面的一个将成为新的活动对话框及其{{1 }}将被调用,这可能会发送消息。