2017-02-13 79 views
-1

發生錯誤。 由於對象的當前狀態,操作無效。 System.InvalidOperationException at Microsoft.Bot.Builder.Dialogs.Conversation。 <> c__3 1.<ResumeAsync>b__3_0() at Microsoft.Bot.Builder.Dialogs.Internals.ReactiveDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__3 1.MoveNext() ---從先前的位置堆棧跟蹤其中的例外是在 System.Runtime.CompilerServices拋出---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)結束.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 Microsoft.Bot.Builder.Dialogs.Internals.ScoringDialogTask 1.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__3 1.MoveNext() ---從先前的位置堆棧跟蹤,其中引發異常---在 體系的結束。 Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.d__3 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__3 1.MoveNext() ---從以前位置拋出異常的堆棧跟蹤結束---在 System.Runtime.CompilerServices。 TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 Microsoft.Bot.Builder.Dialogs.Internals.SerializingDialogTask.d__4 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Bot.Builder.Dialogs.Internals.ExceptionTranslationDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2 1.MoveNext() - 完堆棧跟蹤從以前的位置拋出異常---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在在 Microsoft.Bot.Builder.Dialogs.Internals.LocalizedDialogTask.d__2 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Bot.Builder.Dialogs.Internals.PostUnhandledExceptionToUserTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__5 1.MoveNext() ---從以前的位置,其中的例外是堆棧跟蹤的結尾System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)拋出---在 Microsoft.Bot.Builder.Dialogs.Internals.PostUnhandledExceptionToUserTask.d__5 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Bot.Builder.Dialogs.Internals.LogPostToBot.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__3 1.MoveNext() ---從上一個位置拋出異常的堆棧跟蹤結束---在 System.Runtime.CompilerServices .TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 Microsoft.Bot .Builder.Dialogs.Conversation.d__5 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Bot.Builder.Dialogs.Conversation.<ResumeAsync>d__3 1.MoveNext() ---從先前的位置堆棧跟蹤其中的例外是在 拋出---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)結束System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()在 BotApplication.Controllers.OAuthCallbackController.d__0.MoveNext() 在 C:\ BotApplication \ BotApplication \控制器\ OAuthCallbackController.cs:行 55 ---從以前位置拋出異常結果爲 拋出的堆棧跟蹤---在 System.Runtime.CompilerServices.T askAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Threading.Tasks.TaskHelpersExtensions.d__3`1。的MoveNext() ---從先前的位置在那裏引發異常堆棧跟蹤的結尾---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)(任務 任務)在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() ---從拋出異常的上一個位置的堆棧跟蹤結束---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.Controll ers.ActionFilterResult.d__2.MoveNext() ---從以前的位置拋出異常的堆棧跟蹤結束---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext(任務 任務)() 由於對象的當前狀態,操作無效

這是發生在我試圖恢復用戶認證後的對話。

我打電話驗證這種方式:

在我的第一個對話框:

var message = context.MakeMessage(); 
    await context.Forward(new SecondDialog(), HandleOptions, message, CancellationToken.None); 

然後在我的SecondDialog有這樣的:

var message = await argument; 
        MyStaticModel.toId = message.From.Id; 
        MyStaticModel.toName = message.From.Name; 
        MyStaticModel.fromId = message.Recipient.Id; 
        MyStaticModel.fromName = message.Recipient.Name; 
        MyStaticModel.serviceUrl = message.ServiceUrl; 
        MyStaticModel.channelId = message.ChannelId; 
        MyStaticModel.conversationId = message.Conversation.Id; 
        await context.Forward(new SimpleFacebookAuthDialog(message), ResumeAfterLogIn, message, CancellationToken.None); 

在我的Facebook對話我做恢復餅乾這樣:

public SimpleFacebookAuthDialog(IMessageActivity msg) 
     { 
      ResumptionCookie = new ResumptionCookie(msg); 
     } 

當用戶進行身份驗證我處理身份驗證:

public async Task<HttpResponseMessage> OAuthCallback([FromUri] string userId, [FromUri] string botId, [FromUri] string conversationId, [FromUri] string channelId, [FromUri] string serviceUrl, [FromUri] string locale, [FromUri] string code, [FromUri] string state, CancellationToken token) 
     { 
      //Get the resumption cookie 
      Address address = new Address 
       (
        // purposefully using named arguments because these all have the same type 
        botId: FacebookHelpers.TokenDecoder(botId), 
        channelId: channelId, 
        userId: FacebookHelpers.TokenDecoder(userId), 
        conversationId: FacebookHelpers.TokenDecoder(conversationId), 
        serviceUrl: FacebookHelpers.TokenDecoder(serviceUrl) 

       ); 
      //var resumptionCookie = new ResumptionCookie(FacebookHelpers.TokenDecoder(userId), FacebookHelpers.TokenDecoder(botId), FacebookHelpers.TokenDecoder(conversationId), channelId, FacebookHelpers.TokenDecoder(serviceUrl), locale: locale); 
      var resumptionCookie = new ResumptionCookie(address, userName: null, isGroup: false, locale: locale); 

      // Exchange the Facebook Auth code with Access token 
      var accessToken = await FacebookHelpers.ExchangeCodeForAccessToken(resumptionCookie, code, SimpleFacebookAuthDialog.FacebookOauthCallback.ToString()); 

      // Create the message that is send to conversation to resume the login flow 
      var msg = resumptionCookie.GetMessage(); 
      msg.Text = $"token:{accessToken.AccessToken}"; 

      // Resume the conversation to SimpleFacebookAuthDialog 

      await Conversation.ResumeAsync(resumptionCookie, msg, CancellationToken.None); 

它落在代碼的最後一行。恢復對話時。

任何幫助?

回答

0

我解決了這個問題。 我不知道真正的原因是什麼,但是當我用來等待參數並將其存儲爲消息時,稍後參數在恢復cookie中是錯誤的。現在

,我投參數作爲活動:

var message = (Activity)context.Activity; 

而且它工作正常。

問題解決了:)

相關問題