Я пытаюсь получить RavenDB работает во встроенном режиме на общем / мультитенантном веб-хосте. RavenDB полагается на API хранилища ESENT. Файловая система на хост-машинах заблокирована. Вызов RavenDB Initialize () приводит к следующей записи журнала событий
Raven (20604) D:\Path\To\Website\App_Data\RavenDB\Data52e0e402-79d7-4f47-a219-3d1e2e73321c: An attempt to determine the minimum I/O block size for the volume "D:\" containing "D:\Path\To\Website\App_Data\RavenDB\logs\" failed with system error 5 (0x00000005): "Access is denied. ". The operation will fail with error -1032 (0xfffffbf8).
Таким образом, по-видимому, выполняющемуся процессу требуется доступ для чтения некоторой информации о томе, и это отклоняется, поскольку процессу даны разрешения только на части тома, относящиеся к нему.
Кто-нибудь знает, каковы соответствующие права, и можно ли их как-то упустить?
P.S .: кто-то с большей кармой, чем я, отметьте это ravendb
и esent
Чтение расширенных атрибутов на диске (корневом) требуется пользователю / пользователям на виртуальном хостинге для определения размера блока ввода-вывода.
Microsoft KB266361 показывает сообщения об ошибках для кодов ошибок ESE.
В этом случае код ошибки -1032 - «Невозможно получить доступ к файлу, файл заблокирован или используется».
Рассмотрение других продуктов Microsoft, которые активно используют ESE, например Exchange (см. http://technet.microsoft.com/en-us/library/bb218334(v=exchg.80).aspx) сообщение об ошибке больше соответствует проблеме блокировки, чем проблеме разрешения. Исходя из того, что вы работаете в многопоточной среде IIS с мультитенантностью, проблема с блокировкой снова будет весьма вероятной.
Чтобы помочь в исследовании этой проблемы, я бы предложил использовать что-то вроде Process Explorer (см. http://technet.microsoft.com/en-us/sysinternals/bb896653), чтобы узнать, кто заблокировал файл. Это может указывать на внешний источник как причину блокировки файла.
Я бы предложил изучить вызов метода Initialize()
. В средах с высокой степенью параллелизма метод может быть вызван двумя отдельными потоками. Вам может понадобиться lock
часть кода, отвечающая за вызов этой функции.
Если это не помогает, лучше задать вопрос с образцом кода на StackOverflow.
Надеюсь это поможет.