2009-06-02 10 views
35

Tengo una función web de ASP.NET MVC ejecutándose en Windows Azure y he configurado ELMAH correctamente en el web.config. También tengo mis rutas global.asax ignorar * .axd. Localmente, puedo cargar /elmah.axd, sin embargo, cuando implemente en Azure, obtengo un 404 en esa página. ¿Alguien ha conseguido que ELMAH trabaje en Azure?¿Cómo configurar ELMAH para que funcione con Windows Azure? Obtengo un 404 en Elmah.axd

+0

Véase también http://stackoverflow.com/questions/2118248/asp-net-mvc-elmah-not-working-and-returning-404-page-for-elmah-axd/5205564 –

Respuesta

25

Azure se basa en Windows Server 2008 e IIS7. Esto significa que debe completar la parte system.webServer del archivo web.config.

El archivo de ejemplo incluido con el código fuente de ELMAH contiene los detalles que usted necesita para poner en.

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

Hay 2 líneas ELMAH en el bloque anterior de XML que se tendrá que incluir, y la sección en general, debería contener la mayoría si no todos esos elementos de todos modos.

EDIT: Ya no es necesario ya que es ahora de forma predeterminada:

Para Elmah para trabajar también tendrá que modificar la siguiente línea en su archivo ServiceDefinition.csdef:

<WebRole name="WebRole" enableNativeCodeExecution="true"> 

+0

que tenía funcionaba localmente en mi PC con Vista pero en el servidor en vivo no funcionaba hasta que agregué las 2 líneas de Elmah que mencionas en la parte inferior del web.config. No tuve que entrar en el archivo ServiceDefinition. Una vez que hice esos cambios, recibí un error 403 por lo que necesita establecer allowRemoteAccess en 1 – KevinUK

+0

. Además de esto, estoy usando el SDK Azure de octubre de 2012 y encontré que solo necesitaba el (1) entrada, y (2) la entrada .csdef anotada en la respuesta anterior. También en comparación con una aplicación web MVC estándar donde puede obtener elmah a través de "/ elmah" (según su configuración elmah.mvc.route) con un rol web de Azure MVC, será "/elmah/elmah.axd". Buena suerte. – Bern

+0

enableNativeCodeExecution se establece en true de forma predeterminada de todos modos: http://msdn.microsoft.com/en-us/library/windowsazure/gg557553.aspx –

9

creo, además, (a lo sugerido por @mat1t here) puede que tenga que configurar el acceso remoto a 1:

<elmah> 
<security allowRemoteAccess="0" /> 
.............. 
.............. 
</elmah> 
+1

gracias, este paso es absolutamente necesario –

11

¡También asegure el archivo para que solo los usuarios autorizados puedan ver los registros de errores!

<location path="admin/elmah.axd"> 
    <system.web> 
     <authorization> 
      <allow roles="Administrator" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 
+2

Hay una opción web.config para esto: que debería encargarse de esto . – Bern

Cuestiones relacionadas