c# - nservicebus 使用 msmq 传输发送具有列表类型属性的命令对象
问题描述
我有 2 个 nservicebus 端点,一个端点正在尝试发送一个命令(类)对象,该对象包含 3 个属性,即 bool、List 和 class。下面是完整的命令类
public class StartProcess : ICommand
{
public bool CanStartProcess { get; set; }
public List<ProcessFailed> ProcessFailures { get; set; } = new List<ProcessFailed>();
public ProcessFailed ProcessFailed { get; set; }
}
下面是我填充对象的方式,并且我已经确认所有属性都包含有效值。我只是简化了一些代码
var startProcess = new StartProcess()
{
CanStartProcess = true,
ProcessFailures = file.Body.ValidationReports,
ProcessFailed = file.Body.ValidationReport
};
最后我启动端点并尝试发送对象。. . 这就是我的问题所在
ClaimsProcessorEndpoint.Start();
ClaimsProcessorEndpoint.EndpointInstance.Send(ConfigurationManager.AppSettings["ClaimsManager.Endpoint"], startProcess ).GetAwaiter().GetResult();
注意:当我删除列表属性时,一切正常。我得到以下异常:
exception.Message => The given key was not present in the dictionary.
exception.StackTrace
at System.Collections.Concurrent.ConcurrentDictionary`2.get_Item(TKey key)
at NServiceBus.XmlSerialization.Write(XElement elem, Type t, Object obj)
at NServiceBus.XmlSerialization.WriteObject(XElement elem, String name, Type type, Object value, Boolean useNS)
at NServiceBus.XmlSerialization.WriteEntry(XElement elem, String name, Type type, Object value)
at NServiceBus.XmlSerialization.Write(XElement elem, Type t, Object obj)
at NServiceBus.XmlSerialization.WriteObject(XElement elem, String name, Type type, Object value, Boolean useNS)
at NServiceBus.XmlSerialization.WriteEntry(XElement elem, String name, Type type, Object value)
at NServiceBus.XmlSerialization.Write(XElement elem, Type t, Object obj)
at NServiceBus.XmlSerialization.WriteObject(XElement elem, String name, Type type, Object value, Boolean useNS)
at NServiceBus.XmlSerialization.Serialize()
at NServiceBus.XmlMessageSerializer.Serialize(Object message, Stream stream)
at NServiceBus.SerializeMessageConnector.Serialize(IOutgoingLogicalMessageContext context)
at NServiceBus.SerializeMessageConnector.<Invoke>d__1.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NServiceBus.UnicastSendRouterConnector.<Invoke>d__1.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
解决方案
不幸的是,您没有提供消息的所有类型部分。
序列化过程中可能会发生一些事情,因为您正在分配序列化file.Body.ValidationReports
程序startProcess.ProcessFailures
的行程。
类型file.Body.ValidationReports
是类型ProcessFailed
还是继承自它并扩展该类?如果是这样,请尝试将这些结果映射到新ProcessFailed
对象。
意义,
var startProcess = new StartProcess()
{
CanStartProcess = true,
ProcessFailures = file.Body.ValidationReports.Select(x=>new ProcessFailed{A=x.A, B=x.B}).ToList(),
ProcessFailed = file.Body.ValidationReport
};
推荐阅读
- python - 如何在同一命名空间中的 GUI(tkinter)模块中使用其他 .py 模块的功能?
- javascript - 有没有办法对普通用户隐藏图片网址?
- c++ - 如何在 C++ 中调用虚拟析构函数?
- python - 如何使用 scipy.integrate 设置固定步长?
- coldfusion - 使用 JSoup 从 url 获取 og:image
- c# - 创建对象时出现 SQL 连接异常的问题
- cmd - 我需要一个名为 Defender Control 的 Windows 应用程序的简单切换脚本
- javascript - 如果我们使用 javascript,安全性有什么意义?
- android - hasSystemFeature 没有返回任何东西
- c# - 如何从索引为 2 的行开始隐藏 DatagridView 中的行直到结束?