我的GenericHost托管服务无法启动以下消息:
2010-05-07 09:13:47,406 [1]致命的NServiceBus.Host.Internal.GenericHost [(null)]<(null)> - System.InvalidOperationException:没有消息序列化程序已经con 想通。 在d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ impl \ unicast \ NServiceBus.Unicast.Msmq \中的NServiceBus.Unicast.Transport.Msmq.MsmqTransport.CheckConfiguration() MsmqTransport.cs:第241行 位于d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ impl \ unicast \ NServiceBus.Unicast.Msmq \ MsmqTransport中的NServiceBus.Unicast.Transport.Msmq.MsmqTransport.Start() .cs:第211行 位于d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ unicast \ NServiceBus.Uni中的NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction) cast \ UnicastBus.cs:第694行 位于d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start()中:l ine 665 位于d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ host \ NServiceBus.Host \ Internal \ GenericHost.cs:第77行的NServiceBus.Host.Internal.GenericHost.Start()中
我的端点配置如下:
public class ServiceEndpointConfiguration
: IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
public void Init()
{
// build out persistence infrastructure
var sessionFactory = Bootstrapper.InitializePersistence();
// configure NServiceBus infrastructure
var container = Bootstrapper.BuildDependencies(sessionFactory);
// set up logging
log4net.Config.XmlConfigurator.Configure();
Configure.With()
.Log4Net()
.UnityBuilder(container)
.XmlSerializer();
}
}
我的app.config看起来像:
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<Logging Threshold="DEBUG" />
<MsmqTransportConfig
InputQueue="NServiceBus.ServiceInput"
ErrorQueue="NServiceBus.Errors"
NumberOfWorkerThreads="1"
MaxRetries="2" />
<UnicastBusConfig
DistributorControlAddress=""
DistributorDataAddress=""
ForwardReceivedMessagesTo="NServiceBus.Auditing">
<MessageEndpointMappings>
<!-- publishers don't need to set this for their own message types -->
</MessageEndpointMappings>
</UnicastBusConfig>
<connectionStrings>
<add name="Db" connectionString="Data Source=..." providerName="System.Data.SqlClient" />
</connectionStrings>
<log4net debug="true">
<root>
<level value="INFO"/>
</root>
<logger name="NHibernate">
<level value="ERROR" />
</logger>
</log4net>
这在过去有效,但在通用主机启动时似乎失败了。我的端点配置如下,以及服务的app.config。奇怪的是,在我的端点配置中,我指定使用XmlSerializer进行消息序列化。我没有在错误消息之前的控制台输出中看到任何其他错误。我错过了什么?
谢谢,史蒂夫
答案 0 :(得分:4)
看起来这是我自己的问题,虽然我很难根据收到的错误信息搞清楚这一点。我的所有消息都有一个基类:
public abstract class RequestMessage : IMessage {}
最近,我创建了一条合作伙伴消息:
public abstract class ResponseMessage<TRequest>
where TRequest : RequestMessage {}
显然,当主机启动IStartableBus时,它会触及此通用消息类型,并且无法正确处理它。我只是在使用DefaultBuilder运行时才看到底层错误,而不是我在项目中使用的UnityBuilder。它与泛型类型约束有关。我曾认为这会奏效,但遗憾的是没有。
此致 史蒂夫