2012-01-18 68 views
1

我们有一个NServiceBus服务配置为运行传说。使用InMemory-persistence,一切运行良好。当试图将配置文件更改为NServiceBus.Integration时,我们在启动服务时出现错误。NServiceBus佐贺持久性

端点配置:

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。 – 2012-01-18 10:29:18

+0

你可以包含你的配置文件,以便我们可以看到你包括了一切吗? – 2012-01-18 11:36:59

+0

现在添加了配置文件。 – 2012-01-18 11:44:04

回答

0

问题是,就像安德烈亚斯谈到的那样,使用NHibernate/Fluent NHibernate来持久化SagaData类。

只是概括一切是错误的东西:

  • 为了使用的配置文件NServicebus。 集成,您需要添加对的引用SQLite(使用NuGet)
  • 为了使用配置文件NServiceBus。 生产,您需要在app.config中建立与数据库的连接,如Adam showed in his answer
  • 为了同时使用这两个配置文件,您SagaData类必须由NHibernate的规则被打:
    • 所有属性必须是虚拟
    • 类绝不能密封
    • 也是一样所有属性

的类型,这一切是NServiceBus 2.6。现在,在Beta6中,他们使用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> 
相关问题