Nservicebus NService 2.6使用NService 3.0合同

Nservicebus NService 2.6使用NService 3.0合同,nservicebus,Nservicebus,我们的一个组件是在Nservice bus 2.6中开发的。 我们目前正在使用NSB3.2开发一个新的组件,该组件将从旧服务中使用。 我们在共享NSB 3.2到NSB 2.6组件的合同时遇到问题。 我们不能立即将旧系统迁移到NSB3.2,因为这将是大量的工作。 有没有人遇到过类似的问题?特别是如果您试图将用于3.2消息契约,您将遇到NServiceBus 2.6关于引用NServiceBus.dll版本2.6以访问IMessage接口的硬要求 当然,2.6也没有IEvent和ICommand的概

我们的一个组件是在Nservice bus 2.6中开发的。 我们目前正在使用NSB3.2开发一个新的组件,该组件将从旧服务中使用。 我们在共享NSB 3.2到NSB 2.6组件的合同时遇到问题。 我们不能立即将旧系统迁移到NSB3.2,因为这将是大量的工作。
有没有人遇到过类似的问题?

特别是如果您试图将用于3.2消息契约,您将遇到NServiceBus 2.6关于引用NServiceBus.dll版本2.6以访问IMessage接口的硬要求

当然,2.6也没有IEvent和ICommand的概念

一种解决方案是为3.2消息契约程序集提供双项目

MyPublisher.Events-2-6.csproj
MyPublisher.Events-3-2.csproj
每个项目都将引用相同的C#文件,但2.6版本将引用2.6 NServiceBus.dll,而3.2版本将引用3.2版本,或者如果使用不引人注目的方式,可能会包含一个附加文件来定义特定于程序集的IEvent、ICommand和IMessage接口。当然,您也可以使用名称空间名称的条件或其他度量来定义这些条件并跳过该步骤

然后,您可能需要的最后一件事是在消息契约中使用一些
#if
块来指定版本之间的差异,例如:

#if NSBGT3
    public void MyEvent : IEvent
#else
    public void MyEvent : IMessage
#endif
    {
        // properties
    }
充分披露:我自己还没有尝试过,我只是在想我会怎么做。尝试并发布一些消息,然后检查它们,查看消息XML中有关消息应用于的类型的内容。这将使您更好地了解NServiceBus 2.6是否会正确接受它们,特别是在关注多态消息处理的情况下。当然,您还需要使用3.2客户端和2.6客户端进行测试


祝你好运

我建议在新系统的解决方案中链接旧系统的类文件,这样可以使用较新的NServiceBus二进制文件进行编译,从而避免版本冲突