在NServiceBus启动时引发SQLiteException的服务帐户

在NServiceBus启动时引发SQLiteException的服务帐户,sqlite,nservicebus,Sqlite,Nservicebus,当我尝试使用服务帐户凭据启动nservicebus.host.exe时,出现以下异常: Database was not configured through Database method. System.Data.SQLite.SQLiteException: Unable to open the database file at System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum f

当我尝试使用服务帐户凭据启动nservicebus.host.exe时,出现以下异常:

    Database was not configured through Database method.  
System.Data.SQLite.SQLiteException: Unable to open the database file  
at System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum flags, Int32 maxPoolSize, Boolean usePool)  
at System.Data.SQLite.SQLiteConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection() in :line 0
at NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare() in :line 0
at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect dialect, IConnectionHelper connectionHelper) in :line 0
at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory sessionFactory) in :line 0
at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) in :line 0
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in D:\dev\fluent-nhibernate\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 93
--- End of inner exception stack trace ---
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in D:\dev\fluent-nhibernate\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 100
at NServiceBus.SagaPersisters.NHibernate.Config.Internal.SessionFactoryBuilder.Build(IDictionary^2 nhibernateProperties, Boolean updateSchema) in c:\Dev\DotNet\NServiceBus\src\impl\SagaPersisters\NHibernateSagaPersister\NServiceBus.SagaPersisters.NHibernate.Config\Internal\SessionFactoryBuilder.cs:line 48
--- End of inner exception stack trace ---
at NServiceBus.SagaPersisters.NHibernate.Config.Internal.SessionFactoryBuilder.Build(IDictionary^2 nhibernateProperties, Boolean updateSchema) in c:\Dev\DotNet\NServiceBus\src\impl\SagaPersisters\NHibernateSagaPersister\NServiceBus.SagaPersisters.NHibernate.Config\Internal\SessionFactoryBuilder.cs:line 55
at NServiceBus.ConfigureNHibernateSagaPersister.NHibernateSagaPersister(Configure config, IDictionary^2 nhibernateProperties, Boolean autoUpdateSchema) in c:\Dev\DotNet\NServiceBus\src\impl\SagaPersisters\NHibernateSagaPersister\NServiceBus.SagaPersisters.NHibernate.Config\ConfigureNHibernateSagaPersister.cs:line 80
at Ibfx.BackOffice.Services.NewAccounts.NewAccountsEndpoint.Init() in C:\Dev\TFS\Omega\Src\Svcs\NewAccounts\Src\Service\NewAccountsEndpoint.cs:line 67
at NServiceBus.Host.Internal.GenericHost.Start() in c:\Dev\DotNet\NServiceBus\src\host\NServiceBus.Host\Internal\GenericHost.cs:line 56
如果我使用自己的帐户运行主机,一切正常,但是如果我使用域凭据作为服务运行主机,或者使用RunAs命令使用相同的凭据,则会出现上述异常。我需要配置哪些权限才能使服务正常工作

这是我的配置:

        var configure = NServiceBus.Configure.With()
            .Log4Net<Log4NetLoggerAdapter>(a => { })
            .UnityBuilder(container)
            .XmlSerializer()
            .RijndaelEncryptionService()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
                .MsmqSubscriptionStorage();

        configure.Configurer.ConfigureComponent<MsmqSubscriptionStorage>(
                    ComponentCallModelEnum.None).ConfigureProperty(p => p.DontUseExternalTransaction
                    , true
                );

        IBus bus = configure.UnicastBus()
            .ImpersonateSender(true)
            .LoadMessageHandlers()
            .Sagas()
            .NHibernateSagaPersister()
        .CreateBus()
        .Start();
var configure=NServiceBus.configure.With()
.Log4Net(a=>{})
.UnityBuilder(集装箱)
.XmlSerializer()
.RijndaelEncryptionService()
.MsmqTransport()
.IsTransactional(错误)
.PurgeOnStartup(错误)
.MsmqSubscriptionStorage();
configure.Configurer.ConfigureComponent(
ComponentCallModelEnum.None).ConfigureProperty(p=>p.DontUseExternalTransaction
是的
);
IBus总线=configure.UnicastBus()
.ImpersonateSender(真)
.LoadMessageHandlers()
.Sagas()
.NHibernateSagaPersister()
.CreateBus()
.Start();
我有一个NServiceBus.Host.exe.config文件,其中包含以下内容:

当您临时授予所有人和匿名登录对指定目录的完全控制权时,会发生什么情况?如果这解决了异常,那肯定是一个安全问题。您是否在连接字符串中使用| DataDirectory |?您确定流程实际上正在查看您认为它正在查看的目录吗

接下来,我将尝试使用SQLite内存连接字符串设置,看看它是否至少能够创建并使用数据库:

”:内存:;版本=3;新建=True;池=True;最大池大小=1;“

上面的字符串使用内存中的SQLite,但保持单个连接打开,以便表和数据继续存在,直到进程退出


我将使用的另一个策略是将saga persister更改为另一种SQL风格,例如MS SQL,以查看这是否解决了问题。

肯定是权限问题,我将服务帐户添加到本地管理员组,一切正常。有人知道我需要设置什么权限吗?当我撤销管理员权限,但授予用户对文件夹的完全控制权时,我会出现“尝试写入只读数据库”错误。顺便说一句,该服务安装在“程序文件夹”目录中。但是,它被安装为作为服务运行,我检查了它是否有“作为服务登录”的权限。启动Filemon并确认了它。它试图在\Windows\System32中创建sqlite数据库。我将连接字符串更改为使用“datasource=| DataDirectory |\sagas.sqlite;…”,这就解决了它。一如既往,谢谢乔纳森!