我试图让RavenDB在共享/多租户虚拟主机上以embedded模式运行。 RavenDB依赖于ESENT存储API。 主机上的文件系统被locking。 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).
所以大概是执行过程需要访问读取一些卷信息,并被拒绝,因为该过程只被赋予相关的卷的部分权限。
任何人都知道相关的权利是什么,是否可以省略?
PS:比我更多的业力的人请标记这ravendb和ravendb
Microsoft KB266361显示ESE错误代码的错误消息。
在这种情况下,错误代码-1032是“无法访问文件,文件被locking或正在使用”。
查看大量使用ESE的其他Microsoft产品(如Exchange)(请参阅http://technet.microsoft.com/zh-cn/library/bb218334(v=exchg.80).aspx ),错误消息似乎更符合locking问题比权限问题更重要。 基于你正在一个多租户的IISmultithreading环境中运行这个locking问题将很有可能。
为了帮助调查这个问题,我build议使用像Process Explorer(请参阅http://technet.microsoft.com/en-us/sysinternals/bb896653 )的东西来找出谁在文件上的锁。 这可能会将外部源显示为文件locking的原因。
我会build议调查的方法调用Initialize() 。 在高并发环境中,可能由两个单独的线程调用该方法。 您可能需要lock负责该函数调用的代码部分。
如果这没有帮助,可以用StackOverflow上的代码示例提问。
希望这可以帮助。
共享主机上的用户/用户需要读取驱动器(根)上的扩展属性以确定I / O块大小。