首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RavenDB部署问题

RavenDB部署问题
EN

Stack Overflow用户
提问于 2012-04-24 23:30:54
回答 2查看 3.5K关注 0票数 10

我开发了一个ASP.Net MVC 3应用程序,它使用RavenDB嵌入式作为数据的集成备份存储,我使用this教程作为开始创建RavenDB嵌入式应用程序的基础。我已经能够在我的开发PC上很好地运行它,但是当到了在运行IIS6的Windows 2003 web服务器上部署它的时候,它会抛出以下错误:

无法访问文件,该文件被锁定或正在使用描述:在执行当前web请求期间发生了未处理的异常。请查看堆栈跟踪以获得有关错误的更多信息,以及它起源于代码的位置。

异常详细信息: Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException:无法访问文件,该文件已锁定或正在使用

源错误:

在执行当前web请求期间生成一个未处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来标识。

堆栈跟踪:

C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\Api.cs:2736 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator中的Microsoft.Isam.Esent.Interop.Api.Check(Int32 err)在c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:207中被锁定或使用

无法打开事务存储: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data

( Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator)在c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:222 Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration配置中)在c:\Builds\RavenDB-Stable\Raven.Database\DocumentDatabase.cs:185中

Raven.Client.Embedded.EmbeddableDocumentStore.InitializeInternal() in c:\Builds\RavenDB-Stable\Raven.Client.Embedded\EmbeddableDocumentStore.cs:143 Raven.Client.Document.DocumentStore.Initialize() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\DocumentStore.cs:496 MyApp.CompositionRoot.CreateControllerFactory() in ...\MyApp\CompositionRoot.cs:36 MyApp.CompositionRoot..ctor() in ..\MyApp\CompositionRoot.cs:17

MyApp.MvcApplication.Application_Start()在...MyApp\Global.asax.cs:38中

(0x80004005):无法打开事务存储: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data

System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext上下文,HttpApplication应用程序) +3985477

System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext上下文,MethodInfo[]处理程序) +191

System.Web.HttpApplication.InitSpecial(HttpApplicationState状态,MethodInfo[]处理程序,IntPtr appContext,HttpContext上下文) +325

System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext上下文) +407

System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

(0x80004005):无法打开事务存储: C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data

+11524352 System.Web.HttpRuntime.FirstRequestInit(HttpContext上下文(+11524352 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext上下文)+141个System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext上下文) +4782309

引用的CompositionRoot.cs类中错误的来源是可嵌入文档存储的初始化。

代码语言:javascript
复制
private static IControllerFactory CreateControllerFactory()
{
    var cacheRepository = new EmbeddableDocumentStore();
    cacheRepository.ConnectionStringName = "RavenDB";

    #if DEBUG
        cacheRepository.UseEmbeddedHttpServer = true;
    #endif

    Raven.Database.Server.NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(8080);
    cacheRepository.Initialize(); //Source of Error
    var controllerFactory = new TDRControllerFactory(cacheRepository);
    return controllerFactory;
}

为什么这种情况只发生在web服务器上,而不是在我的开发PC上?我不知道确切原因是什么。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-25 16:47:23

这原来是一个权限问题,我在我的应用程序文件夹的根目录上给了IIS_IUSRS组修改和写权限,这给了它正确初始化数据库所需的权限。根中可能有一个特定的文件夹,它需要修改/写入访问权限(在我的例子中,可能是App_Data文件夹,因为我在那里实例化RavenDB实例)。我必须进行测试,因为我不希望任何用户对整个应用程序文件夹具有修改/写权限。

票数 16
EN

Stack Overflow用户

发布于 2012-04-25 06:40:13

您需要确保您的CreateControllerFactory只运行一次,即使在应用程序启动时遇到并发请求时也是如此。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10307432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档