我有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
};
最后,我启动端点并尝试send对象。 。 。这是我的问题所在
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
};