2011-10-17 33 views
6

Estoy tratando de usar Microsoft.VisualBasic.Logging.FileLogTraceListener en mi aplicación ASP.NET MVC 3 (vb.net). Funciona en mi PC dev, pero arroja un error cuando se ejecuta desde un servidor IIS 6. Aquí está el web.config que utilizo:Usando Microsoft.VisualBasic.Logging.FileLogTraceListener con ASP.NET MVC 3

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.diagnostics> 
     <trace autoflush="true" /> 
     <sources> 
      <source name="requests" switchValue="All"> 
       <listeners> 
        <remove name="default" /> 
        <add name="txtfile" /> 
       </listeners> 
      </source> 
     </sources> 
     <sharedListeners> 
      <add name="txtfile" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, 
         Microsoft.VisualBasic, Version=8.0.0.0, 
         Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, 
         processorArchitecture=MSIL" 
       location="custom" 
       customlocation="D:\PROJECTS\saidproject\App_Data" 
       logfilecreationschedule="weekly" 
      /> 
     </sharedListeners> 
    </system.diagnostics> 
</configuration> 

El error que tengo es la siguiente:

System.Configuration.ConfigurationErrorsException: Could not create Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL. ---> System.UnauthorizedAccessException: Access to the path 'C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj) 
    at System.IO.Directory.CreateDirectory(String path) 
    at System.Windows.Forms.Application.GetDataPath(String basePath) 
    at System.Windows.Forms.Application.get_UserAppDataPath() 
    at Microsoft.VisualBasic.Logging.FileLogTraceListener..ctor(String name) 
    at Microsoft.VisualBasic.Logging.FileLogTraceListener..ctor() 

Parece que FileLogTraceListener intentó escribir en C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 y fracasó.

En realidad, la carpeta Microsoft Corporation\Internet Information Services\6.0.3790.3959 no existe dentro de Default User\Application Data. Traté de crearlo, asignando acceso completo a todos, pero todavía tengo el mismo error.

¿Es posible utilizar Microsoft.VisualBasic.Logging.FileLogTraceListener desde la aplicación ASP.NET MVC?

Respuesta

3

¡Lo siento todo, error!

He añadido C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 en un servidor diferente. Después de agregar \Microsoft Corporation\Internet Information Services\6.0.3790.3959 en el servidor correcto y otorgarle acceso de escritura, el registro funciona.

0

Intenta marcar la referencia como "Copiar local" en el estudio visual, luego reconstruye. Mi intuición es que la identidad con la que se ejecuta tu AppPool no tiene acceso para leer el dll de referencia.

+0

Creo que está dentro de Microsoft.VisualBasic. ¿No está ya incluido por defecto? Estoy usando vb.net –

+0

Es, pero creo que si marcas Copy Local, hará una copia en la carpeta "bin". Que podría resolver problemas relacionados con los derechos. –

+0

La ubicación a la que se accede es bastante clara aquí, y no indica problemas para acceder al ensamblado en cuestión. No tomaría este consejo en particular. –

1

Su aplicación probablemente se está ejecutando en IIS 6 en una cuenta que no tiene suficiente acceso a la ruta que está intentando escribir. Trate

  • cambiar la ruta en la que se escribirá/log
  • carrera con una cuenta que tenga acceso a la ruta
  • dar acceso al usuario de IIS a la ruta que está tratando de escribir en
1

Este error ocurre porque el constructor de FileLogTraceListener intenta obtener la carpeta de datos de la aplicación "actual". "Actual" para IIS6 de alguna manera funciona para el usuario predeterminado. Entonces, dado que la carpeta no existe, (el código que llama realmente) intenta crearla.

Está intentando obtener la carpeta de datos de la aplicación para que pueda inicializar su propiedad de ubicación personalizada INCLUSO si ha especificado una en el archivo web.config y, por lo tanto, no la necesitará realmente. Diseño bastante tonto.

Cuestiones relacionadas