【问题标题】:"No message serializer has been configured" error when starting NServiceBus endpoint启动 NServiceBus 端点时出现“未配置消息序列化程序”错误
【发布时间】:2010-05-07 16:27:58
【问题描述】:

我的 GenericHost 托管服务无法启动并显示以下消息:

2010-05-07 09:13:47,406 [1] FATAL NServiceBus.Host.Internal.GenericHost [(null)] - System.InvalidOperationException:没有消息序列化程序 想通了。 在 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) 演员\UnicastBus.cs:第694行 在 d:\BuildAgent-02\work\672d81652eaca4e1\src\unicast\NServiceBus.Unicast\UnicastBus.cs:l 中的 NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start() 线665 在 d:\BuildAgent-02\work\672d81652eaca4e1\src\host\NServiceBus.Host\Internal\GenericHost.cs:line 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 进行消息序列化。我在错误消息之前的控制台输出中看不到任何其他错误。我错过了什么?

谢谢,史蒂夫

【问题讨论】:

    标签: nservicebus


    【解决方案1】:

    看起来这是我自己的问题,尽管根据收到的错误消息我很难弄清楚。我的所有消息都有一个基类:

    public abstract class RequestMessage : IMessage {} 
    

    最近,我创建了一个合作伙伴消息:

    public abstract class ResponseMessage<TRequest> 
        where TRequest : RequestMessage {}
    

    显然,当主机启动 IStartableBus 时,它会遇到这种通用消息类型并且无法正确处理它。在使用 DefaultBuilder 运行时,我只真正看到了潜在的错误,而不是我在项目中使用的 UnityBuilder。它与泛型类型约束有关。我原以为这会奏效,但遗憾的是它没有。

    问候, 史蒂夫

    【讨论】:

    • 谢谢,+1 为我节省了试图找出导致错误的原因的时间。消息序列化程序似乎不喜欢通用接口。没有时间看看需要什么才能让它工作,但回滚了一个更改并暂时不使用泛型
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 2016-06-02
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多