Как настроить ELMAH для работы с Windows Azure?Я получаю 404 на Elmah.axd
-
06-09-2019 - |
Вопрос
У меня есть веб-роль ASP.NET MVC, работающая в Windows Azure, и я правильно настроил ELMAH в файле web.config.У меня также есть маршруты global.asax, игнорирующие *.axd.Локально я могу загрузить /elmah.axd, однако при развертывании в Azure на этой странице появляется ошибка 404.Кто-нибудь заставлял ELMAH работать на Azure?
Решение
Azure основан на Windows Server 2008 и IIS7.Это означает, что вам необходимо заполнить часть system.webServer файла web.config.
Файл-пример, включенный в исходный код elmah, содержит детали, которые вам необходимо указать.
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory" />
<remove name="ScriptHandlerFactoryAppServices" />
<remove name="ScriptResource" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
</system.webServer>
В приведенном выше блоке XML есть две строки elmah, которые вам нужно будет включить, и в целом раздел в любом случае должен содержать большинство, если не все, этих элементов.
РЕДАКТИРОВАТЬ:Больше не требуется, поскольку теперь это включено по умолчанию:
Чтобы Elmah работал, вам также необходимо изменить следующую строку в файле ServiceDefinition.csdef:
<WebRole name="WebRole" enableNativeCodeExecution="true">
Другие советы
Также защитите файл, чтобы только разрешенные пользователи могли просматривать журналы ошибок!
<location path="admin/elmah.axd">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
Я думаю, что дополнительно (к тому, что предлагает @mat1t здесь) вам может потребоваться установить для удаленного доступа значение 1:
<elmah>
<security allowRemoteAccess="0" />
..............
..............
</elmah>