2011-05-17 17 views
5

Estoy intentando implementar Raven DB en mi sitio ejecutando .Net 4 en modo integrado (el sitio se utilizó anteriormente para alojar ASP.Net MVC . 3 sitioError FileAccessDenied (JET_errFileAccessDenied, no se puede acceder al archivo, el archivo está bloqueado o en uso)

Mi fichero de configuración es la siguiente:

<appSettings> 
    <add key="Raven/DataDir" value="~\App_Data"/> 
    <add key="Raven/AnonymousAccess" value="All"/> 
    <add key="Raven/Port" value="80"/> 
</appSettings> 
<system.webServer> 
    <handlers> 
     <add name="All" path="*" verb="*" 
       type="Raven.Web.ForwardToRavenRespondersFactory, Raven.Web"/> 
    </handlers> 
</system.webServer> 

Sin embargo, la excepción que se ve es la siguiente:

**Error FileAccessDenied (JET_errFileAccessDenied, Cannot access file, the file is locked or in use) 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: Microsoft.Isam.Esent.Interop.EsentErrorException: Error FileAccessDenied (JET_errFileAccessDenied, Cannot access file, the file is locked or in use) 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[EsentErrorException: Error FileAccessDenied (JET_errFileAccessDenied, Cannot access file, the file is locked or in use)] 
    Microsoft.Isam.Esent.Interop.Api.Fail(Int32 err) in C:\Work\ravendb\SharedLibs\Sources\ManagedEsent-48322\EsentInterop\Api.cs:2279 
    Microsoft.Isam.Esent.Interop.Api.JetInit(JET_INSTANCE& instance) in C:\Work\ravendb\SharedLibs\Sources\ManagedEsent-48322\EsentInterop\Api.cs:130 
    Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) in c:\Builds\raven\Raven.Storage.Esent\TransactionalStorage.cs:169 

[InvalidOperationException: Could not open transactional storage: d:\IIS\domainfolder\ravendb\App_Data\Data] 
    Raven.Storage.Esent.TransactionalStorage.Initialize(IUuidGenerator uuidGenerator) in c:\Builds\raven\Raven.Storage.Esent\TransactionalStorage.cs:182 
    Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration configuration) in c:\Builds\raven\Raven.Database\DocumentDatabase.cs:127 
    Raven.Web.ForwardToRavenRespondersFactory..cctor() in c:\Builds\raven\Raven.Web\ForwardToRavenRespondersFactory.cs:31 

[TypeInitializationException: The type initializer for 'Raven.Web.ForwardToRavenRespondersFactory' threw an exception.] 
    Raven.Web.ForwardToRavenRespondersFactory..ctor() +0 

[TargetInvocationException: Exception has been thrown by the target of an invocation.] 
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98 
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241 
    System.Activator.CreateInstance(Type type, Boolean nonPublic) +69 
    System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +1136 
    System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +111 
    System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture) +23 
    System.Web.HttpRuntime.CreateNonPublicInstance(Type type, Object[] args) +60 
    System.Web.Configuration.HandlerFactoryCache..ctor(String type) +46 
    System.Web.HttpApplication.GetFactory(String type) +81 
    System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +223 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184** 

he co Conecté mi host y tengo la confirmación de que tengo acceso de lectura/escritura a App_Data y también lo he confirmado escribiendo algún código para crear un archivo allí.

Mi host insinuó que mi problema podría deberse a la inicialización doble de mi almacén de datos, sea lo que sea lo que eso signifique.

¿Alguno de ustedes me puede indicar una solución aquí?

ACTUALIZACIÓN 2011-05-18 estoy usando RavenDB-Build-360 disponibles actualmente en http://builds.hibernatingrhinos.com/download/2004. Estoy usando las instrucciones de instalación en http://ravendb.net/documentation/docs-deployment-iis para ejecutarlo en IIS 7.5. Pero en lugar de usar mi propio IIS local, simplemente estoy copiando el contenido de la carpeta/Web a mi host. Esto significa la carpeta/bin, web.config y el archivo SilverLight XAP. Entonces no puedo depurar mi camino a través de nada.

No he notado la primera línea (sobre el módulo WebDAV) pero consultaré con mi anfitrión lo antes posible.
¿Cómo se apoya Raven DB en esto?

+0

¿El sitio tiene nivel completo de confianza ASP.NET? Creo que Raven necesita plena confianza porque Esent es un código no administrado. – nickvane

+0

Y asegúrese de crear solo 1 instancia de DocumentStore y solo Inicializarla una vez (en global.asax Application_Start) (de ahí "la inicialización doble de mi almacén de datos") – nickvane

+0

Hola nickvane, no he pedido esta información, pero me ' Supongo que funciona en confianza media. ¿El requisito de Raven DB para ejecutarse con plena confianza documentado en cualquier lugar? Además, estoy usando la compilación (actual: 360) con la carpeta web precompilada, por lo que no tengo acceso inmediato a global.asax –

Respuesta

3

tuve exactamente el mismo problema: mi solución fue eliminar la identidad del conjunto de aplicaciones predeterminado de 'ApplicationPoolIdentity' a una cuenta de administrador (como yo para fines de prueba). después de un reinicio del sitio web, esto funcionó.

+1

Esta solución funcionó para mí también, aunque parece una mala idea tener que usar una cuenta de administrador ... Me pregunto qué permisos específicos puedo aplicar a la cuenta que utilicé en lugar de simplemente hacerla administrativa. – t3rse

0

También me encontré con este problema y no pude solucionarlo con ninguna de las soluciones que se encuentran en la web.

Terminé yendo a IIS, haciendo clic derecho en mi aplicación web que usa cuervo, edito permisos.

Seleccionó la pestaña Seguridad, hizo clic en Servicio de RED, luego controló Control total. Presione aplicar, todo comenzó a funcionar de nuevo.

En pocas palabras: resultó ser un número de permiso. No estoy seguro de por qué se cambiaron mis permisos, ya que todo esto funcionaba hace unos días. Tal vez un parche IIS? No lo sé. En cualquier caso, asegúrese de que el Servicio de red tenga permiso para su aplicación web que usa cuervo. Le di control total al Servicio de Red, pero puede salirse con la suya con el control de lectura/escritura.

Cuestiones relacionadas