Вопрос по iis-6, event-log, securityexception, asp.net-mvc – Исключение безопасности при записи в EventLog из приложения ASP.NET MVC

9

У меня есть библиотека, которую я создал с некоторой бизнес-логикой, которая включает в себя запись вSystem.Diagnostics.EventLog пример. Библиотека обычно вызывается из приложения-службы Windows, но теперь яя пытаюсь вызвать те же функции библиотеки из моего приложения ASP.NET MVC.

Я попытался этот код внутри моего контроллера, чтобы создать экземпляр EventLog, который я передаю в метод, который должен записывать в журнал.

Dim log = New EventLog("Application", My.Computer.Name, "MyMVCApp")

Следующая ошибка генерируется, когда код в методе библиотеки пытается записать в журнал:

[SecurityException: Requested registry access is not allowed.]
 System.ThrowHelper.ThrowSecurityException(ExceptionResource resource) +51
 Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +7462217
 System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) +366
 System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName) +194
 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) +205
 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type) +14

Мое веб-приложение работает как пользователь сетевой службы на Windows Server 2003 с IIS 6. Нужно ли что-то делать, чтобы дать пользователю сетевой службы доступ к реестру?

Есть ли лучший способ создать экземпляр EventLog для использования в приложении ASP.NET MVC? Есть ли уже созданный фреймворк, на который мне просто нужно сослаться?

Ваш Ответ

3   ответа
19

Удостоверение сетевой службы может записывать в журнал событий используясуществующие источники событий, но онине может создавать новые источники событий из-за недостаточных разрешений реестра. "

А также..."

Если источник для журнала событий, связанного с экземпляром EventLogне существует, создан новый источник событий. "

Похоже, ваш источник журнала событий нене существует, и этопытаемся создать новый источник журнала событий, используя пользователя сетевой службы (который требует записи в реестр, поэтому не будет работать). "

Чтобы включить приложение ASP.NET для записи в журнал событий с использованием источника событий, который еще не существует, у вас есть два варианта: "

Создание новых источников событий во время установки приложенияВручную создайте новую запись источника событий в реестре.

Таким образом, необходимо создать журнал за пределами приложения (вы можетесделать это программно с этим пользователем. Сделайте это либо вручную, либо создайте простое приложение командной строки, чтобы упростить установку).

Для полной информации:

http://msdn.microsoft.com/en-us/library/ms998320.aspx#paght000015_eventlogaccess

Лично яЯ рекомендую вам неизменить сетевые права пользователя, а создать источник журналов за пределами веб-приложения. Я предпочитаю консольное приложение (которое займет у вас около 5 минут, чтобы написать, и которое вы также можете использовать для подготовки других машин). Запустите новое консольное приложение в VS.NET и добавьте код для создания источников журналов. Пример:

http://www.dotnetspider.com/resources/23593-Create-Event-log-VB-NET.aspx

Затем просто запустите консольное приложение из строки cmd, когда войдете в систему с соответствующими разрешениями.

0

то записи в журнале приложений.

Вы можете создать оконное / консольное приложение со следующим кодом и запустить его от имени администратора, это создаст для вас новый журнал.

if (!EventLog.Exists("LOG_NAME"))
   EventLog.CreateEventSource("LOG_NAME", "LOG_NAME");

это создаст новый журнал внутри журнала событий и будет виден в журналах приложений и сервисов.

 if (!EventLog.SourceExists("MyMVCApp"))
    EventLog.CreateEventSource("MyMVCApp", "LOG_NAME");

Это создаст новый источник внутри кастома "log_name» и вы можете использовать код

Dim log = New EventLog("LOG_NAME", My.Computer.Name, "MyMVCApp")

создать собственный журнал.

Посмотрите, как назначить разрешение для журнала:stackoverflow.com/questions/1823433/... Vinod Srivastav
5

Если вы не уверены в том, какой источник событий он пытается создать, трудно будет найти ответ, принятый выше.

Более простым решением было бы переключить пул приложений для временного использования LocalSystem, затем запустить приложение и выдать ошибку. Он сможет создать соответствующий источник журнала событий, и после этого вы сможете переключиться на использование NetworkService.

Похожие вопросы