Domain driven design NServicebus发布事件-接收空消息

Domain driven design NServicebus发布事件-接收空消息,domain-driven-design,nservicebus,cqrs,neventstore,eda,Domain Driven Design,Nservicebus,Cqrs,Neventstore,Eda,在我的域中发布事件后,我不断从反规范化程序主机收到以下消息: 2011-07-22 14:18:32,374 [Worker.5] WARN NServiceBus.Unicast.UnicastBus [(null)] <(null)> - Received an empty message - ignoring. 不完全是什么忙乱的事情…很清楚为什么不能反序列化该消息-您有只读属性。如果您希望执行此操作,则需要切换到公共get/set属性。为了保持您不公开更改属性的意图,这

在我的域中发布事件后,我不断从反规范化程序主机收到以下消息:

2011-07-22 14:18:32,374 [Worker.5] WARN  NServiceBus.Unicast.UnicastBus [(null)]
 <(null)> - Received an empty message - ignoring.

不完全是什么忙乱的事情…

很清楚为什么不能反序列化该消息-您有只读属性。如果您希望执行此操作,则需要切换到公共get/set属性。为了保持您不公开更改属性的意图,这里有一种替代方法:

[Serializable]
public class AccountCreatedEvent : IEvent
{
    public string Id { get; private set; }
    public string Name {get; private set; }

    public AccountCreatedEvent(string id, string name)
    {
        this.Id = id;
        this.Name = name;
    }

    public override string ToString()
    {
        return "AccountCreatedEvent - for when you've created an account";
    }
}

很明显,为什么该消息不能被反序列化-您拥有只读属性。如果您希望执行此操作,则需要切换到公共get/set属性。为了保持您不公开更改属性的意图,这里有一种替代方法:

[Serializable]
public class AccountCreatedEvent : IEvent
{
    public string Id { get; private set; }
    public string Name {get; private set; }

    public AccountCreatedEvent(string id, string name)
    {
        this.Id = id;
        this.Name = name;
    }

    public override string ToString()
    {
        return "AccountCreatedEvent - for when you've created an account";
    }
}

将NServiceBusPublisher发布方法设为断点会很有趣。busMessage变量看起来像什么?它看起来像它应该的样子-AccountCreatedEvent的一个实例,具有正确的id和名称…在这一点上,它看起来像一个NServiceBus问题。您使用的是什么版本的NServiceBus?另外,您是否检查了实际队列中消息的内容(一旦发送,在被另一方处理之前)?将NServiceBusPublisher publish方法设为断点会很有趣。busMessage变量看起来像什么?它看起来像它应该的样子-AccountCreatedEvent的一个实例,具有正确的id和名称…在这一点上,它看起来像一个NServiceBus问题。您使用的是什么版本的NServiceBus?另外,您是否检查了实际队列中消息的内容(一旦发送,在被另一方处理之前)?很好,谢谢。当你看到一大堆新东西时,很难发现显而易见的东西。很好的一个——谢谢。当你看到一大堆新东西时,很难发现显而易见的东西。
    <MsmqTransportConfig
    InputQueue="SonatribeInputQueue"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
    />

  <UnicastBusConfig
     DistributorControlAddress=""
     DistributorDataAddress=""
     ForwardReceivedMessagesTo="">
    <MessageEndpointMappings>
      <add Messages="Events" Endpoint="SonatribeInputQueue"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>
 <MsmqTransportConfig
    InputQueue="MyServerInputQueue"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
    />

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Events" Endpoint="SonatribeInputQueue"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>
2011-07-22 16:31:30,646 [Worker.7] ERROR NServiceBus.Faults.InMemory.FaultManage
r [(null)] <(null)> - Serialization failed for message with ID 56b7b693-090f-49b
d-83ad-7beeb334fe6d\12639.
System.Security.VerificationException: Operation could destabilize the runtime.
   at SetId(Object , Object )
   at NServiceBus.Serializers.XML.MessageSerializer.GetObjectOfTypeFromNode(Type
 t, XmlNode node) in c:\Dev\NServiceBus\src\impl\Serializers\NServiceBus.Seriali
zers.XML\MessageSerializer.cs:line 343
   at NServiceBus.Serializers.XML.MessageSerializer.Process(XmlNode node, Object
 parent) in c:\Dev\NServiceBus\src\impl\Serializers\NServiceBus.Serializers.XML\
MessageSerializer.cs:line 330
   at NServiceBus.Serializers.XML.MessageSerializer.Deserialize(Stream stream) i
n c:\Dev\NServiceBus\src\impl\Serializers\NServiceBus.Serializers.XML\MessageSer
ializer.cs:line 267
   at NServiceBus.Unicast.UnicastBus.Extract(TransportMessage m) in c:\Dev\NServ
iceBus\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 851
2011-07-22 16:31:30,908 [Worker.7] WARN  NServiceBus.Unicast.UnicastBus [(null)]
 <(null)> - Received an empty message - ignoring.
[Serializable]
public class AccountCreatedEvent : IEvent
{
    public readonly string Id;
    public readonly string Name;

    public AccountCreatedEvent()
    {

    }

    public AccountCreatedEvent(string id, string name)
    {
        this.Id = id;
        this.Name = name;
    }
    public override string ToString()
    {
        return "AccountCreatedEvent - for when you've created an account";
    }
}
[Serializable]
public class AccountCreatedEvent : IEvent
{
    public string Id { get; private set; }
    public string Name {get; private set; }

    public AccountCreatedEvent(string id, string name)
    {
        this.Id = id;
        this.Name = name;
    }

    public override string ToString()
    {
        return "AccountCreatedEvent - for when you've created an account";
    }
}