2011-10-17 21 views
6

Sto cercando di utilizzare Microsoft.VisualBasic.Logging.FileLogTraceListener nella mia app ASP.NET MVC 3 (vb.net). Funziona nel mio PC di sviluppo ma genera un errore quando viene eseguito da un server IIS 6. Ecco il web.config che uso:Utilizzo di 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> 

L'errore che ho ottenuto è questa:

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() 

Sembra FileLogTraceListener ha tentato di scrivere C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 e non è riuscito.

In realtà la cartella Microsoft Corporation\Internet Information Services\6.0.3790.3959 non esiste all'interno di Default User\Application Data. Ho provato a crearlo, assegnando l'accesso completo a tutti, ma ho ancora lo stesso errore.

È possibile utilizzare Microsoft.VisualBasic.Logging.FileLogTraceListener dall'app ASP.NET MVC?

risposta

3

Quindi mi dispiace, mio ​​errore!

Ho aggiunto C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 su un diverso server. Dopo aver aggiunto \Microsoft Corporation\Internet Information Services\6.0.3790.3959 sul server giusto e aver concesso l'accesso in scrittura, il logging funziona.

0

Provare a contrassegnare il riferimento come "Copia locale" in Visual Studio, quindi ricostruire. Il mio istinto è che l'identità in cui viene eseguito AppPool non ha accesso alla lettura della dll di riferimento.

+0

Penso che sia all'interno di Microsoft.VisualBasic. Non è già incluso di default? Sto usando vb.net –

+0

Lo è, ma penso che se lo contrassegni Copia Locale, ne farà una copia nella cartella "bin". Quale potrebbe risolvere i problemi relativi ai diritti. –

+0

La posizione a cui si accede è abbastanza chiara qui e non indica affatto problemi di accesso all'assembly in questione. Non prenderei questo particolare consiglio. –

1

L'applicazione è probabilmente in esecuzione in IIS 6 con un account che non ha abbastanza accesso al percorso che sta tentando di scrivere. Prova

  • cambiare il percorso in cui si scriverà/log
  • fuga con un account che abbia accesso al percorso
  • dare accesso all'utente IIS per il percorso che sta cercando di scrivere a
1

Questo errore si verifica perché il costruttore per FileLogTraceListener tenta di ottenere la cartella di dati dell'applicazione "corrente". "Corrente" per IIS6 come funziona all'utente predefinito. Quindi poiché la cartella non esiste, essa (il codice che chiama in realtà) prova a crearla.

Si sta tentando di ottenere la cartella dati dell'app in modo che possa inizializzare la proprietà di posizione personalizzata ANCHE se ne è stata specificata una nel web.config e quindi non ne avrà realmente bisogno. Design piuttosto stupido.