![](/img/trans.png)
[英]NServiceBus Transport is NULL when using a custom ServiceHostFactory, WAS
[英]nservicebus send command object with list type property using msmq transport
我有 2 個 nservicebus 端點,一個端點正試圖發送一個命令(類)object,其中包含 3 個屬性,即 bool、List 和 class。 下面是完整的命令 class
public class StartProcess : ICommand
{
public bool CanStartProcess { get; set; }
public List<ProcessFailed> ProcessFailures { get; set; } = new List<ProcessFailed>();
public ProcessFailed ProcessFailed { get; set; }
}
下面是我如何填充 object 並且我已經確認所有屬性都包含有效值。 我只是簡化了一些代碼
var startProcess = new StartProcess()
{
CanStartProcess = true,
ProcessFailures = file.Body.ValidationReports,
ProcessFailed = file.Body.ValidationReport
};
最后我啟動端點並嘗試發送object。 . . 這就是我的問題所在
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
類型還是繼承自它並擴展了 class? 如果是這樣,請嘗試將 map 這些結果添加到新的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
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.