2012-01-18 17 views
1

私たちには、sagasを実行するように設定されたNServiceBusサービスがあります。 InMemory-persistenceでは、すべてが正常に動作します。プロファイルをNServiceBus.Integrationに変更しようとすると、サービスの開始時にエラーが発生します。NServiceBus Saga Persistence

エンドポイントの設定:

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として設定する必要があります。
  • 両方これらの2つのプロファイルを使用するためには、あなたのSagaDataクラスは、NHibernateはのルールでプレイしている必要があります。すべてのプロパティは、クラスが同じになっ
  • を封印してはいけません
  • 仮想なければなりません
    • すべてのプロパティ

のタイプのためにこのすべてがNServiceBus 2.6用です。 3.0では、今ベータ6に入っていますが、代わりにRavenDBを使用します.Hibernateや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> 
関連する問題