随机获取BadRequest调用EndDialogAsync()

时间:2019-04-03 16:40:16

标签: .net botframework

我最近为许多用户部署了一个漫游器。有时,当我致电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,因为对话框应该已经结束。

1 个答案:

答案 0 :(得分:1)

您必须记住,EndDialogAsync只会从堆栈中弹出一个对话框,因此,如果堆栈上还有其他对话框,那么最上面的一个将成为新的活动对话框及其{{1 }}将被调用,这可能会发送消息。