2010-10-14 37 views
0

我有一个Windows服务,它有一个计时器,并在timer_Elapsed事件处理程序中从另一个组件的方法将被调用,这应该看着数据库,并获取或更新一些记录。这个过程将发生每2 minutes.I在组件中使用nhibernate进行数据访问。当我运行从它工作正常单元测试的方法,这意味着配置和映射是正确的,但是从Windows服务,我得到这个异常:Windows服务和Nhibernate

FluentNHibernate.Cfg.FluentConfigurationException was caught 
    Message="An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.\r\n\r\n" 
    Source="FluentNHibernate" 
    StackTrace: 
     at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 121 
InnerException: NHibernate.MappingException 
     Message="Could not configure datastore from input stream (XmlDocument)" 
     Source="NHibernate" 
     StackTrace: 
      at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) 
      at NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) 
      at NHibernate.Cfg.Configuration.AddDocument(XmlDocument doc, String name) 
      at NHibernate.Cfg.Configuration.AddDocument(XmlDocument doc) 
      at FluentNHibernate.PersistenceModel.Configure(Configuration cfg) in d:\Builds\FluentNH\src\FluentNHibernate\PersistenceModel.cs:line 265 
      at FluentNHibernate.Cfg.FluentMappingsContainer.Apply(Configuration cfg) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentMappingsContainer.cs:line 141 
      at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\MappingConfiguration.cs:line 64 
      at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 112 
     InnerException: System.TypeInitializationException 
      Message="The type initializer for 'NHibernate.Util.TypeNameParser' threw an exception." 
      Source="NHibernate" 
      TypeName="NHibernate.Util.TypeNameParser" 
      StackTrace: 
       at NHibernate.Util.TypeNameParser.Parse(String type, String defaultNamespace, String defaultAssembly) 
       at NHibernate.Cfg.ClassExtractor.ClassEntry..ctor(String extends, String className, String entityName, String assembly, String namespace) 
       at NHibernate.Cfg.ClassExtractor.GetClassEntries(XmlDocument document) 
       at NHibernate.Cfg.MappingsQueue.AddDocument(NamedXmlDocument document) 
       at NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument document) 
       at NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String name) 
       at NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) 
      InnerException: System.Threading.ThreadAbortException 
       Message="Exception of type 'System.Threading.ThreadAbortException' was thrown." 
       InnerException: 

这里是timer_elapsed事件处理程序的代码:

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 


    { 
     lock (processLock) 
     { 
      DoWorkComponent component= new DoWorkComponent(); 
      component.DoWorkMethod(); 
     } 
    } 

有谁知道这可以如何解决?我需要有不同的设置吗?

由于事先

萨沙

+0

在这种情况下,有可能是在代码或单元测试和的差构成应用。 – Paco 2010-10-14 21:17:40

+0

感谢您的回复。其实所有与nhibernate配置相关的代码都在DoWorkComponent中。单元测试项目和Windows服务正在引用组件。 – Sacha 2010-10-14 21:38:28

+0

猜测代码是什么太难了。 – Paco 2010-10-15 19:55:10

回答