Грешка при стартиране на крайна точка на NServiceBus не е конфигуриран сериализатор на съобщения

Моята хоствана GenericHost услуга не успява да стартира със следното съобщение:

2010-05-07 09:13:47,406 [1] ФАТАЛЕН 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:l ine 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