У меня есть приложение ASP.Net MVC 3, которое я разработал, который использует RavenDB Embedded в качестве интегрированного хранилища резервных копий для данных, я использовал этот учебник в качестве основы для начала создания приложения MVC с RavenDB Embedded. Мне удалось запустить его на моем компьютере разработки, но когда пришло время его развертывания на нашем веб-сервере под управлением Windows Server 2003 с IIS6, он сделал следующую ошибку:
Не удается получить доступ к файлу, файл заблокирован или используется. Описание: необработанное исключение произошло во время выполнения текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации о и где он возник в коде.
Сведения об исключении: Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException: не удается файл доступа, файл заблокирован или используется
Ошибка источника:
Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.
Трассировка стека:
[EsentFileAccessDeniedException: невозможно получить доступ к файлу, файл заблокирован или используется] Microsoft.Isam.Esent.Interop.Api.Check(Int32 err) в C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\Api.cs: 2736 Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) в C:\Строит\RavenDB-Стабильный\Raven.Storage.Esent\TransactionalStorage.cs: 207
[InvalidOperationException: не удалось открыть транзакционное хранилище: C:\Inetpub\Wwwroot\MyApp\App_Data\Database\RavenDB\Data]
Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) в C:\Строит\RavenDB-Стабильный\Raven.Storage.Esent\TransactionalStorage.cs: 222 Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration конфигурации) в C:\Строит\RavenDB-Stable\Raven.Database\DocumentDatabase.cs: 185
Raven.Client.Embedded.EmbeddableDocumentStore.InitializeInternal() в C:\Строит\RavenDB-Stable\Raven.Client.Embedded\EmbeddableDocumentStore.cs: 143 Raven.Client.Document.DocumentStore.Initialize() в C:\Строит\RavenDB-Стабильное\Raven.Client.Lightweight\Документ\DocumentStore.cs: 496 MyApp.CompositionRoot.CreateControllerFactory() в... \MyApp\CompositionRoot.cs: 36 MyApp.CompositionRoot..ctor() в.. \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 контекст, приложение 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 контекст приложения, контекст 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) +11524352 System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, контекст HttpContext) +4782309
Источником ошибки в ссылочном классе CompositionRoot.cs является инициализация хранилища встраиваемых документов.
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;
}
Почему это происходит только на веб-сервере, а не на моем компьютере разработки? Я не знаю, какая именно причина. Любая помощь приветствуется.