2017-01-20 1 views
0

사용 로봇 시뮬레이터 : RootLuisDialog에서컨텍스트 포스트 비동기 예외

await Conversation.SendAsync(activity,() => new RootLuisDialog()); 

:

{:이 예외를 만드는

 [LuisIntent("")] 
     [LuisIntent("None")] 
     public async Task None(IDialogContext context, LuisResult result) 
     { 
      string message = $"Sorry, I did not understand '{result.Query}'. Type 'help' if you need assistance."; 

      await context.PostAsync(message); 

      context.Wait(this.MessageReceived); 
     } 

는 MessagesController이 코드를 가지고 "Assem에 'Microsoft.Bot.Connector.Activity'를 입력하십시오. BLY 'Microsoft.Bot.Connector는, 버전 = 3.0.0.0이, 문화 = 중립, 이 PublicKeyToken = 31bf3856ad364e35'로 직렬화 표시되지 않은 "} 데이터 :. {System.Collections.ListDictionaryInternal} HRESULT : -2146233076 헬프 : null InnerException : null 메시지 : "Microsoft.Bot.Connector.Activity 'Microsoft.Bot.Connector, 버전 = 3.0.0.0, 문화 = 중립, PublicKeyToken = 31bf3856ad364e35'이 (가) 직렬화 가능으로 표시되어 있지 않습니다." 출처 : "mscorlib에" 스택 트레이스 : "System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (RuntimeType이 형)에서 \ 연구 \ n System.Runtime.Serialization.FormatterServices.GetSerializableMembers (유형 유형, StreamingContext 컨텍스트) \에서 R \ n 에서 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() \ R \ n System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize (개체 OBJ에서 , ISurrogateSelector surrogateSelector, StreamingContext 콘텍스트 SerObjectInfoInit serObjectInfoInit, IFormatterConverter 변환기, ObjectWriter objectWriter, SerializationBinder binder) \ r \ n에 있습니다.System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write (WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) \ r \ n at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (Object 그래프, 헤더 [] inHeaders, __BinaryWriter serWriter 부울 fcheck가) \ R \ n System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (트림 serializationStream 오브젝트 그래프 헤더 [] 헤더 부울 fcheck가)에서 \ R \ n에서 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (스트림 serializationStream, 개체 그래프) \ 012 \ 에서 Microsoft.Bot.Builder.Internals.Fibers.FormatterStore 1.Microsoft.Bot.Builder.Internals.Fibers.IStore<T>.Save(T item)\r\n at Microsoft.Bot.Builder.Internals.Fibers.ErrorResilientStore 1.Micro soft.Bot.Builder.Internals.Fibers.IStore.Save (T 항목) \ 012 \ 에 Microsoft.Bot.Builder.Internals.Fibers.FactoryStore 1.Microsoft.Bot.Builder.Internals.Fibers.IStore<T>.Save(T item)\r\n at Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__21 1.MoveNext() \ r \ n --- 끝 (예외 작업) \ System \ Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 (작업 )에서 작업)에서 예외가 throw 된 이전 위치의 스택 추적을--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess에서 \ r \ n 작업) \ r \ n Microsoft.Bot.Builder.Dialogs.Internals.ReactiveDial ogTask. d__5 1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Bot.Builder.Dialogs.Internals.LocalizedDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2 1.MoveNext() \ 연구 \ 없음 --- 예외가 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업)에 --- \ 연구 \ n을 던져 된 이전 위치에서 스택 추적의 끝 \ r \ n에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업) \ 012 \ 에서 Microsoft.Bot.Builder.Dialogs.내부 .ScoringDialogTask 1.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6 1.MoveNext() \ r \ n --- 예외가 발생한 이전 위치의 스택 추적 끝 --- System.Runtime.Co mp \) \ 연구 \ n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification에서 (작업 작업) \ 연구 \ n Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.d__6 1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6 1.MoveNext()에서 \ 연구 \ 없음 --- 예외가 발생한 이전 위치에서 스택 추적 끝 --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) \ 012 \ System.Runtime.CompilerServices에서 \ r \ n. TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업) (예외가 throw 된 이전 위치의 스택 추적 끝 --- \ r \ n) System.Runtime.CompilerServices.TaskAwaiter.NonSuccess (작업 작업)에서 실행하십시오. 에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업) \ 012 \ 에서 Microsoft.Bot.Builder.Dialogs. Conversation.d__2.MoveNext() \ r \ n --- 예외가 발생한 이전 위치의 스택 추적 끝 --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업)에서 \ r \ n \ r \ n에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 태스크) \ R \ n System.Runtime.CompilerServices.TaskAwaiter.GetResult (AT) \ R \ n C에서 MessengerBot.MessagesController.d__1.MoveNext()에서 : \ MyApp를 MessagesController.cs \ : 라인 (60) " TargetSite : {System.Reflection.MemberInfo [] InternalGetSerializableMembers (System.RuntimeType)} 내가 여기에 예외가 ... 도움이 무엇인지 이해하는 것이 꽤 확실하지 않다

?

편집 : 매개 변수 - 활동으로 rootluisdialog에 대한 새로운 생성자로 문제를 해결했습니다.

Conversation.SendAsync (activity,() => new RootLuisDialog (activity)); 다음 RootLuisDialog에 난이 있습니다

Activity activity; 
public RootLuisDialog(Activity activity) 
     { 
      this.activity = activity; 

     } 
+0

문제가 이미 해결 된 경우 질문을 삭제하십시오. –

+0

적용중인 솔루션이 올바른 것으로 들리지만 –

+0

예. 그렇지 않습니다. 어떤 생각? – activ8

답변

1

Activity 클래스는 당신이보고있는 오류 인, serialisable 없습니다. LuisDialog에있는 모든 public 또는 protected 속성은 응답 사이에 컨텍스트로 저장 될 수 있도록 직렬화 할 수 있어야합니다.

Dialog 클래스가 LuisDialog에서 상속된다고 가정하면이 작업은 의도로부터 활동을 잡아내는 데 이미 처리해야합니다. 일반적으로 활동이 아니라 LUIS의 컨텍스트와 결과로 작업하게됩니다. 곧바로 IDialog 구현을 작성하는 경우).

컨트롤러에서 전달하면 대화의 후속 통화에 포함되지 않으므로 예상 한대로 작동하지 않습니다.

+0

그래서이 Activity 클래스를 직렬화하는 방법은 무엇입니까? – activ8

+0

당신은 정말로 컨텍스트와 LuisResult로 할 수없는 활동으로 무엇을하려합니까? –

+0

다른 대화 상자로 전달하려고합니다. – activ8