2013-02-17 2 views
4

Я пытаюсь использовать elmah для регистрации ошибок на моем сервере. Если на моем локальном компьютере возникает исключение, elmah сохранит эту ошибку. Но после того, как я загружу его на лазурный, он больше не работает. Конфигурация базы данных является правильной, потому что я могу регистрировать ошибки со следующим утверждением (Local/Azure):ELMAH не входит в систему Azure

Elmah.ErrorSignal.FromCurrentContext().Raise(e); 

Я предлагаю это ошибка конфигурации, поскольку лазурь имеет другую версию IIS, а также другой сервер в Кoнфигурирование.

Это мой web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="RetryPolicyConfiguration" type="Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.Configuration.RetryPolicyConfigurationSettings, Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling, Version=5.1.1209.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    <section name="typeRegistrationProvidersConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.TypeRegistrationProvidersConfigurationSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> 
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> 
     <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 
    <RetryPolicyConfiguration defaultRetryStrategy="Fixed Interval Retry Strategy"> 
    <incremental name="Incremental Retry Strategy" maxRetryCount="5" retryIncrement="00:00:03" /> 
    <fixedInterval name="Fixed Interval Retry Strategy" maxRetryCount="6" retryInterval="00:00:04" /> 
    <exponentialBackoff name="Exponential Backoff Retry Strategy" /> 
    </RetryPolicyConfiguration> 
    <typeRegistrationProvidersConfiguration> 
    <clear /> 
    <add name="Caching" sectionName="cachingConfiguration" /> 
    <add name="Cryptography" sectionName="securityCryptographyConfiguration" /> 
    <add name="Exception Handling" sectionName="exceptionHandling" /> 
    <add name="Instrumentation" sectionName="instrumentationConfiguration" /> 
    <add name="Logging" sectionName="loggingConfiguration" /> 
    <add name="Policy Injection" sectionName="policyInjection" /> 
    <add name="Security" sectionName="securityConfiguration" /> 
    <add name="Data Access" providerType="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings, Microsoft.Practices.EnterpriseLibrary.Data" /> 
    <add name="Validation" providerType="Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.ValidationTypeRegistrationProvider, Microsoft.Practices.EnterpriseLibrary.Validation" /> 
    <add sectionName="RetryPolicyConfiguration" name="RetryPolicyConfiguration" /> 
    </typeRegistrationProvidersConfiguration> 
    <connectionStrings> 
    <add providerName="System.Data.SqlClient" name="elmah" connectionString="..." /> 
    </connectionStrings> 
    <system.web> 
    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8" uiCulture="en-US" culture="en-US" enableClientBasedCulture="false" /> 
    <httpRuntime maxRequestLength="2000" enableVersionHeader="false" /> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/#login" defaultUrl="~/" timeout="7200" /> 
    </authentication> 
    <customErrors mode="On"></customErrors> 
    <trust level="Full" /> 
    <machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" /> 
    <pages enableSessionState="false" enableViewState="false" validateRequest="false" controlRenderingCompatibilityVersion="4.0"> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    <sessionState mode="Off" timeout="120" /> 
    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
    </system.web> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Practices.TransientFaultHandling.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-5.1.1209.0" newVersion="5.1.1209.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> 
    </startup> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> 
    </modules> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="2.00:00:00" /> 
    </staticContent> 
    <urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" /> 
    <handlers> 
     <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
    </handlers> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <httpErrors errorMode="Custom"> 
     <clear /> 
     <error statusCode="404" path="/error404" responseMode="ExecuteURL" /> 
    </httpErrors> 
    </system.webServer> 
    <elmah> 
    <security allowRemoteAccess="true" /> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" applicationName="..." /> 
    </elmah> 
    <location path="elmah.axd" inheritInChildApplications="false"> 
    <system.web> 
     <authorization> 
     <allow roles="admin" /> 
     <deny users="*" /> 
     </authorization> 
     <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
    </system.web> 
    <system.webServer> 
     <handlers> 
     <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
     </handlers> 
    </system.webServer> 
    </location> 
</configuration> 
+0

Вы можете проверить, работает ли обработчик? если вы перейдете на сайт/elmah.axd, вы получите сообщение об ошибке? – amhed

+0

Также, как вы развертываете Azure? непосредственно из Visual Studio или вы развертываете из TFS? Является ли это сайтом Azure или облачным сервисом Azure Compute? – amhed

+0

Да, обработчик работает. Я могу перейти к elmah.axd и увидеть ошибки, которые я установил вручную с помощью команды Elmah.ErrorSignal.FromCurrentContext(). Raise (e) '. Но Elmah не регистрирует ошибки сервера (http-код ошибки 500). – user1224129

ответ

0

Просто ради любопытства, удалить обработчик Elmah из <location> узла и переместить их обратно под <system.web> и <system.webServer> узлов и посмотреть, если эту работу. Я знаю, что это не идеальное решение, но оно гарантирует, что вы регистрируетесь, работая из коробки без специальной обработки.

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

0

Возможно, вы уже решили это так на всякий случай - при сравнении моего web.config с вашим, кажется, отсутствует <modules> раздел от <system.webServer> узел. То же самое относится к узлу <system.web>.

Вот мое:

<system.web> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
    </httpModules> 
    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 
</system.web> 

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
    </modules> 
    <handlers> 
     <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </handlers> 
</system.webServer> 

Опять же, обратите внимание <httpModules> и <modules> узлы.

Смежные вопросы