Использование Microsoft.VisualBasic.Logging.FileLogTraceListener с ASP.NET MVC 3 - PullRequest
6 голосов
/ 17 октября 2011

Я пытаюсь использовать Microsoft.VisualBasic.Logging.FileLogTraceListener в моем приложении ASP.NET MVC 3 (vb.net). Он работает на моем ПК разработчика, но выдает ошибку при запуске с сервера IIS 6. Вот web.config, который я использую:

<?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>

Я получил следующую ошибку:

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

Похоже, FileLogTraceListener попытался записать в C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 и не смог.

На самом деле папка Microsoft Corporation\Internet Information Services\6.0.3790.3959 не существует в Default User\Application Data. Я попытался создать его, назначив всем полный доступ, но все равно получил ту же ошибку.

Можно ли использовать Microsoft.VisualBasic.Logging.FileLogTraceListener из приложения ASP.NET MVC?

Ответы [ 4 ]

3 голосов
/ 17 октября 2011

Извините, моя ошибка!

Я добавил C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959 на другой сервер.После того, как я добавил \Microsoft Corporation\Internet Information Services\6.0.3790.3959 на нужный сервер и предоставил ему доступ на запись, запись в журнал работает.

1 голос
/ 03 марта 2012

Эта ошибка возникает из-за того, что конструктор для FileLogTraceListener пытается получить «текущую» папку данных приложения. «Текущий» для IIS6 как-то работает для пользователя по умолчанию. Затем, поскольку папка не существует, она (код, который она действительно вызывает) пытается создать ее.

Он пытается получить папку данных приложения, чтобы он мог инициализировать свое пользовательское свойство местоположения ДАЖЕ, если вы указали его в файле web.config и, таким образом, оно действительно не понадобится. Довольно глупый дизайн.

1 голос
/ 17 октября 2011

Возможно, ваше приложение работает в IIS 6 под учетной записью, у которой недостаточно доступа к пути, который пытается записать. Попробуйте

  • изменение пути, куда он будет писать / log
  • запустить с учетной записью, имеющей доступ к пути
  • предоставить доступ пользователю IIS к пути, который пытается записать в
0 голосов
/ 17 октября 2011

Попробуйте пометить ссылку как «Копировать локальный» в visual studio, затем пересоберите. Я чувствую, что ваш AppPool не имеет доступа для чтения справочной библиотеки DLL.

...