2012-01-18 2 views
1

Sagas를 실행하도록 구성된 NServiceBus 서비스가 있습니다. InMemory-persistence를 사용하면 모든 것이 잘 돌아갑니다. 프로파일을 NServiceBus.Integration으로 변경하려고하면 서비스를 시작할 때 오류가 발생합니다.NServiceBus Saga 지속성

엔드 포인트 구성 :

public class MyEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization 
{ 
    private IContainer _container; 

    public void Init() 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     SetupStructureMap(); 

     Configure.With() 
      .Log4Net() 
      .StructureMapBuilder(_container) 
      .Sagas() 
      .XmlSerializer(); 
    } 

    private void SetupStructureMap() 
    { 
     [...] 
    } 
} 

오류 메시지 :

FATAL 2012-01-18 11:11:52,197 2640ms GenericHost   Start    - FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail. 

     * Database was not configured through Database method. 
    ---> System.ArgumentException: The number of generic arguments provided doesn't equal the arity of the generic type definition. 
    Parameter name: instantiation 
     at System.RuntimeType.MakeGenericType(Type[] instantiation) 
     at FluentNHibernate.Automapping.AutoMapManyToMany.GetInverseProperty(PropertyInfo property) 
     at FluentNHibernate.Automapping.AutoMapManyToMany.MapsProperty(PropertyInfo property) 
     at FluentNHibernate.Automapping.AutoMapper.TryToMapProperty(ClassMappingBase mapping, PropertyInfo property, IList`1 mappedProperties) 
     at FluentNHibernate.Automapping.AutoMapper.MapEverythingInClass(ClassMappingBase mapping, Type entityType, IList`1 mappedProperties) 
     at FluentNHibernate.Automapping.AutoMapper.MergeMap(Type classType, ClassMappingBase mapping, IList`1 mappedProperties) 
     at FluentNHibernate.Automapping.AutoMapper.Map(Type classType, List`1 types) 
     at FluentNHibernate.Automapping.AutoPersistenceModel.AddMapping(Type type) 
     at FluentNHibernate.Automapping.AutoPersistenceModel.CompileMappings() 
     at FluentNHibernate.Cfg.AutoMappingsContainer.Apply(Configuration cfg) 
     at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) 
     at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() 
     --- End of inner exception stack trace --- 
     at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() 
     at NServiceBus.SagaPersisters.NHibernate.Config.Internal.SessionFactoryBuilder.UpdateDatabaseSchemaUsing(FluentConfiguration fluentConfiguration) 
     at NServiceBus.SagaPersisters.NHibernate.Config.Internal.SessionFactoryBuilder.Build(IDictionary`2 nhibernateProperties, Boolean updateSchema) 
     at NServiceBus.ConfigureNHibernateSagaPersister.NHibernateSagaPersister(Configure config, IDictionary`2 nhibernateProperties, Boolean autoUpdateSchema) 
     at NServiceBus.ConfigureNHibernateSagaPersister.NHibernateSagaPersisterWithSQLiteAndAutomaticSchemaGeneration(Configure config) 
     at NServiceBus.Host.Internal.ProfileHandlers.IntegrationProfileHandler.NServiceBus.IHandleProfile.ProfileActivated() 
     at NServiceBus.Host.Internal.ProfileManager.<ActivateProfileHandlers>b__14(IHandleProfile hp) 
     at System.Collections.Generic.List`1.ForEach(Action`1 action) 
     at NServiceBus.Host.Internal.ProfileManager.ActivateProfileHandlers() 
     at NServiceBus.Host.Internal.GenericHost.Start() 

     * Database was not configured through Database method. 

구성 파일 : 당신이 (가) 설정에서 다음을 누락처럼

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
     <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" /> 
     <section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig,NServiceBus.Core" /> 
    </configSections> 
    <MsmqTransportConfig InputQueue="MyQueue" ErrorQueue="MyQueueError" NumberOfWorkerThreads="1" MaxRetries="5" /> 

    <UnicastBusConfig> 
     <MessageEndpointMappings> 
      <add Messages="My.MessageContracts" Endpoint="MyQueue" /> 
     </MessageEndpointMappings> 
    </UnicastBusConfig> 
    <log4net debug="false"> 
     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="C:\Log\My.log" /> 
      <appendToFile value="true" /> 
      <rollingStyle value="Size" /> 
      <maxSizeRollBackups value="10" /> 
      <maximumFileSize value="10MB" /> 
      <staticLogFileName value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
      </layout> 
     </appender> 
     <root> 
      <level value="INFO" /> 
      <appender-ref ref="RollingLogFileAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+0

NServiceBus 2.6을 실행하는 중입니다. –

+0

설정 파일을 포함하여 모든 것을 포함했는지 확인할 수 있습니까? –

+0

구성 파일이 추가되었습니다. –

답변

0

Andreas가 언급 한대로 NHibernate/Fluent NHibernate를 사용하여 SagaData 클래스를 지속하는 데 문제가있었습니다. 프로필 NServicebus을 사용하기 위해서는

  • :

    그냥 틀린 모든 것을 요약합니다. 통합에 SQLite (NuGet 사용)에 대한 참조를 추가해야합니다.
  • 프로필 NServiceBus를 사용하려면 다음을 추가하십시오. 생산이면 app.config의 데이터베이스에 대한 연결을 Adam showed in his answer으로 설정해야합니다.
    • 모든 속성이
    • 이 클래스는 봉인되어서는 안
    • 같은 간다 가상 여야 모두이 두 가지 프로파일을 사용하려면
    • , 당신의 SagaData-클래스는 자 NHibernate의 규칙에 의해 연주해야 모든 속성

의 유형이 모든 NServiceBus 2.6입니다. 현재 베타 6에있는 3.0에서는 RavenDB를 대신 사용하며 NHibernate 또는 SQLite에 바인딩하지 않습니다. 2.6에서 3.0으로의 전환이 어떻게 이루어지는지는 아직 알지 못하지만이 프로젝트에서 우리가 진행하는 방식이라고 생각합니다.

1

는 응용 프로그램에, 보이는 샘플에서 OrderService의 .config :

<section name="DBSubscriptionStorageConfig" type="NServiceBus.Config.DBSubscriptionStorageConfig, NServiceBus.Core" /> 
<section name="NHibernateSagaPersisterConfig" type="NServiceBus.Config.NHibernateSagaPersisterConfig, NServiceBus.Core" /> 

<DBSubscriptionStorageConfig> 
    <NHibernateProperties> 
     <add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider"/> 
     <add Key="connection.driver_class" Value="NHibernate.Driver.SQLite20Driver"/> 
     <add Key="connection.connection_string" Value="Data Source=.\Subscriptions.sqlite;Version=3;New=True;"/> 
     <add Key="dialect" Value="NHibernate.Dialect.SQLiteDialect"/> 
    </NHibernateProperties> 
    </DBSubscriptionStorageConfig> 

<NHibernateSagaPersisterConfig> 
    <NHibernateProperties> 
     <add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider"/> 
     <add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver"/> 
     <add Key="connection.connection_string" Value="Server=localhost;initial catalog=NServiceBus;Integrated Security=SSPI"/> 
     <add Key="dialect" Value="NHibernate.Dialect.MsSql2000Dialect"/> 
    </NHibernateProperties> 
    </NHibernateSagaPersisterConfig>