MassTransit消息错误输入

我正在尝试通过MassTransit发布的消息遇到基本类型问题。 考虑以下:

[Serializable] public abstract class Event : CorrelatedBy { public Guid CorrelationId { get; set; } public abstract string EventName { get; } public override string ToString() { return string.Format("{0} - {1}", EventName, CorrelationId); } } [Serializable] public class PersonCreated : Event { public PersonCreated(Guid personId, string firstName, string lastName) { PersonId = personId; FirstName = firstName; LastName = lastName; } public readonly Guid PersonId; public readonly string FirstName; public readonly string LastName; } 

但是,当我尝试使用以下内容发布一组抽象事件时:

 public void PublishEvents(IEnumerable events) { foreach (var e in events) { Bus.Instance.Publish(e); } } 

无论具体类型如何,我都不会收到此系列中的任何活动。 如果我在公共汽车上发布之前将事件转换为适当的具体类型,我确实会收到正确的消息。

关于我如何纠正这个以允许我的事件的抽象集合被处理而不会每个人都进行处理的任何想法?

编辑:我试图更改我的设置以使用BinarySerialization,如下所示:

  Bus.Initialize(sbc => { sbc.UseBinarySerializer(); }); 

并没有产生任何行为上的变化。 我能够调用Consumes类的唯一方法是将事件显式转换为PersonCreated类型。

编辑:Serializer在这里无关紧要。 我没想到这一点。

您可以通过对Event对象进行reflection并获取它的实际类型来调用具有正确类型信息的Bus.Instance.Publish 。 这将是一些尴尬的代码,但一旦完成它可能很容易重用。 在Magnum中,我们有一个扩展方法来帮助解决这个问题。

 Bus.Instance.FastInvoke(new[]{ event.GetType() }, "Publish", event); 

加入我们的邮件列表http://groups.google.com/group/masstransit-discuss ,我们很乐意详细讨论。