【发布时间】:2017-06-05 11:59:09
【问题描述】:
使用机器人模拟器:
在 MessagesController 中有这段代码:
await Conversation.SendAsync(activity, () => new RootLuisDialog());
在 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);
}
这是一个例外:
{"在程序集中键入'Microsoft.Bot.Connector.Activity' 'Microsoft.Bot.Connector,版本=3.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 未标记为可序列化。"} 数据:{System.Collections.ListDictionaryInternal} H结果:-2146233076 帮助链接:空 内部异常:空 消息:“在程序集“Microsoft.Bot.Connector”中键入“Microsoft.Bot.Connector.Activity”,版本=3.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 未标记为可序列化。” 资料来源:“mscorlib” StackTrace:“在 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型)\r\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 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(对象 图, Header[] inHeaders, __BinaryWriter serWriter, Boolean f检查)\r\n 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 serializationStream,对象图,Header[] 标头,布尔值 f检查)\r\n 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 序列化流,对象图)\r\n at 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.ErrorResilientStore1.Microsoft.Bot.Builder.Internals.Fibers.IStore.Save(T 项目)\r\n 在 Microsoft.Bot.Builder.Internals.Fibers.FactoryStore1.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__211.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Builder.Dialogs.Internals.ReactiveDial og任务。 d__51.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__21.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Builder.Dialogs.Internals.ScoringDialogTask1.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__61.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.d__61.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__61.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Builder.Dialogs.Conversation.d__4.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.Throw ForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Builder.Dialogs.Conversation.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at MessengerBot.MessagesController.d__1.MoveNext() 在 C:\myapp\MessagesController.cs:第 60 行" 目标站点:{System.Reflection.MemberInfo[] InternalGetSerializableMembers(System.RuntimeType)}
我不太确定我是否理解这里的例外情况...... 有什么帮助吗?
编辑:我解决了带有参数 - 活动的 rootluisdialog 的新构造函数的问题。
await Conversation.SendAsync(activity, () => new RootLuisDialog(activity)); 然后在 RootLuisDialog 我有这个:
Activity activity;
public RootLuisDialog(Activity activity)
{
this.activity = activity;
}
【问题讨论】:
-
如果问题已经解决,请删除问题
-
虽然您应用的解决方案听起来不太对
-
是的。它不是。有什么想法吗?
-
下面的答案看起来很准确。不知道您为什么要保留该活动的参考。
标签: c# botframework azure-language-understanding