我有一个我开发的 ASP.Net MVC 3 应用程序,它使用 RavenDB Embedded 作为数据的集成后备存储,我使用本教程作为开始使用 RavenDB Embedded 创建 MVC 应用程序的基础。我已经能够在我的开发 PC 上正常运行它,但是当需要将它部署到运行 IIS6 的 Windows Server 2003 Web 服务器上时,它抛出了以下错误:
无法访问文件,文件被锁定或正在使用 描述:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException:无法访问文件,文件已锁定或正在使用
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[EsentFileAccessDeniedException:无法访问文件,文件已锁定或正在使用] C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\Api 中的 Microsoft.Isam.Esent.Interop.Api.Check(Int32 err)。 c:2736 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) 在 c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:207
[InvalidOperationException:无法打开事务存储: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() 在 c:\Builds\RavenDB-Stable\Raven.Client.Embedded\EmbeddableDocumentStore.cs:143 Raven.Client.Document.DocumentStore.Initialize() 在 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[HttpException (0x80004005): 无法打开事务存储:C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +3985477
System.Web.HttpApplication .RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext , HttpContext 上下文) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375[HttpException (0x80004005): 无法打开事务存储:C:\inetpub\wwwroot\MyApp\App_Data\Database\RavenDB\Data]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352 System.Web.HttpRuntime.EnsureFirstRequestInit( HttpContext 上下文)+141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+4782309
引用的 CompositionRoot.cs 类中的错误来源是初始化 Embeddable Document Store 时。
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 上?我不确定确切的原因可能是什么。任何帮助表示赞赏。