Сериализатор сообщений не настроен, ошибка при запуске конечной точки NServiceBus

Моя размещенная служба GenericHost не запускается со следующим сообщением:

07.05.2010 09:13:47,406 [1] FATAL NServiceBus.Host.Internal.GenericHost [(null)] ‹(null)> — System.InvalidOperationException: сериализатор сообщений не настроен. в NServiceBus.Unicast.Transport.Msmq.MsmqTransport.CheckConfiguration() в d:\BuildAgent-02\work\672d81652eaca4e1\src\impl\unicast\NServiceBus.Unicast.Msmq\ MsmqTransport.cs:строка 241 в NServiceBus.Unicast.Transport .Msmq.MsmqTransport.Start() в d:\BuildAgent-02\work\672d81652eaca4e1\src\impl\unicast\NServiceBus.Unicast.Msmq\MsmqTransport .cs:строка 211 в NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start (Действие startupAction) в d:\BuildAgent-02\work\672d81652eaca4e1\src\unicast\NServiceBus.Uni cast\UnicastBus.cs:строка 694 в NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start() в d:\BuildAgent -02\work\672d81652eaca4e1\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 665 в NServiceBus.Host.Internal.GenericHost.Start() в d:\BuildAgent-02\work\672d81652eaca4e1\src\host\ NServiceBus.Host\Internal\GenericHost.cs:строка 77

Моя конфигурация конечной точки выглядит так:

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 для сериализации сообщений. Я не вижу никаких других ошибок в выводе консоли перед сообщением об ошибке. Что мне не хватает?

Спасибо, Стив


person SteveBering    schedule 07.05.2010    source источник


Ответы (1)


Похоже, это была моя собственная проблема, хотя мне было трудно понять это из-за сообщения об ошибке, которое я получил. У меня есть базовый класс для всех моих сообщений:

public abstract class RequestMessage : IMessage {} 

Недавно я создал партнерское сообщение:

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

По-видимому, когда хост запускал IStartableBus, он сталкивался с этим общим типом сообщения и не обрабатывал его правильно. Я действительно видел основную ошибку только при работе с DefaultBuilder, а не с UnityBuilder, который я использую в своем проекте. Это как-то связано с ограничением универсального типа. Я предполагал, что это сработает, но, к сожалению, этого не произошло.

С уважением, Стив

person SteveBering    schedule 11.05.2010
comment
Спасибо, +1 за то, что сэкономили мне время, пытаясь понять, что вызвало ошибку. Сериализатору сообщений не нравятся универсальные интерфейсы. Не было времени, чтобы увидеть, что нужно, чтобы заставить его работать, но откатил изменение и пока делал это без дженериков. - person Paul Hadfield; 19.10.2010