log4net выбрасывает исключение безопасности в веб-приложении ASP.Net MVC - PullRequest
10 голосов
/ 05 февраля 2010

Я написал 3 веб-приложения ASP.net MVC, и все они развернуты на серверах общего хостинга с моим провайдером.

Все 3 приложения очень похожи по конфигурации и настройкам. Первое приложение развернуто на сервере, отличном от второго и третьего. 1-е приложение не дает мне ошибок.

2-е и 3-е приложения выплевывают следующее SecurityException несколько : случайно:

alt text

Ссылка

Текст исключения:

 Security Exception
Description: The application attempted to perform an operation not allowed by the security policy.  To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.

Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Configuration.ConfigurationPermission, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' failed.

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:

[SecurityException: Request for the permission of type 'System.Configuration.ConfigurationPermission, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +58
   System.Configuration.BaseConfigurationRecord.CheckPermissionAllowed(String configKey, Boolean requirePermission, Boolean isTrustedWithoutAptca) +99


Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3082 

Я получаю вышеуказанную ошибку при первом посещении страницы после развертывания или редактирования файла web.config. Тем не менее, на последующих страницах перезагрузки я не понимаю. 2 сайта снова будут в порядке до конца дня, но на следующее утро я снова получаю ту же ошибку.

Ошибки появляются последовательно после того, как я отредактировал файл web.config, который, как я предполагаю, вызывает принудительную перекомпиляцию?

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

1 Ответ

20 голосов
/ 09 февраля 2010

Таким образом, получается, что вышеупомянутая исключительная ситуация SecurityException составляет 3 раза

  • мой провайдер настроил ASP.net для работы в режиме средний уровень доверия на своих новых серверах и в режиме полное доверие на своих старых серверах. Мои веб-приложения разделены между этими двумя серверами, поэтому я получаю различное поведение между приложениями, даже если они настроены одинаково

  • Я использую log4net для регистрации ошибок, и в моем файле Global.asax у меня есть следующее:

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
        log4net.Config.XmlConfigurator.Configure();
        log.Debug("Logging Initialized.");
    }
    

    Эта строка - log4net.Config.XmlConfigurator.Configure(); - это то, что вызывает вышеприведенное исключение. Это происходит только один раз, когда приложение запускается или перезапускается, если они web.config изменены. Вот почему я не мог понять, откуда возникла проблема.

  • Мне пришлось добавить requirePermission = "false" в конфигурационный раздел log4net в web.config :

    <section name="log4net" requirePermission="false" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    

Теперь, если бы я разрабатывал в режиме среднего доверия, я бы поднял эти проблемы. Вы можете заставить ваше приложение работать в режиме среднего доверия, добавив в мой web.config следующее:

  <system.web>
     <trust level="Medium"/>
  </system.web>

Заставив мое приложение работать в режиме среднего доверия, я выбрал исходное исключение в dev точно в том месте, где оно возникло, и выяснил, что с этим не так ..

...