NServiceBus:通过代码配置时未正确加载消息处理程序类型
在PubSub示例中更改Subscriber2项目后,当此订阅者收到消息时,我收到以下错误: 错误 NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)]-无法提取 消息数据。 System.TypeLoadException:无法执行 句柄类型“MyMessages.EventMessage” 我将EndpointConfig.cs文件更改为:NServiceBus:通过代码配置时未正确加载消息处理程序类型,nservicebus,Nservicebus,在PubSub示例中更改Subscriber2项目后,当此订阅者收到消息时,我收到以下错误: 错误 NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)]-无法提取 消息数据。 System.TypeLoadException:无法执行 句柄类型“MyMessages.EventMessage” 我将EndpointConfig.cs文件更改为: using NServiceBus; namespace Subscriber2 {
using NServiceBus;
namespace Subscriber2
{
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
Configure.With(new[] { typeof(EventMessageHandler), typeof(NServiceBus.Unicast.Transport.CompletionMessage) })
.DefaultBuilder()
.XmlSerializer()
.UnicastBus()
.DoNotAutoSubscribe();
}
}
}
有人知道为什么这不起作用吗?您没有在列表中指定消息类型。如果使用With()的重载,则必须提供所有类型。我建议改为指向特定的程序集,并让NSB扫描它以查找正确的类型。或者,您可以什么也不做,让它扫描bin目录。看起来像是我列出了处理程序的类型,而不是消息。那么,我真正的问题是,有没有办法显式指定处理程序?我希望能够在运行时确定处理程序,我担心如果我有多个相同类型的处理程序,它会混淆。您必须向NSB使用的容器添加一个条件。为了实现这一点,您可以将容器的个人实例传递到NSB中以供使用。这样,您就可以完全控制加载的内容。