2009-06-02 50 views
35

我有一個在Windows Azure上運行的ASP.NET MVC web角色,並且已經在web.config中正確設置了ELMAH。我也有我的global.asax忽略* .axd路線。在本地,我能夠加載/elmah.axd,但是當我部署到Azure時,我在該頁面上獲得了404。有沒有人獲得ELMAH在Azure上的工作?如何配置ELMAH以使用Windows Azure?我在Elmah.axd上獲得了一個404

+0

參見http://stackoverflow.com/questions/2118248/asp-net-mvc-elmah-not-working-and-returning-404-page-for-elmah-axd/5205564 – 2014-04-03 10:40:18

回答

25

Azure基於Windows Server 2008和IIS7。這意味着您需要填充web.config文件的system.webServer部分。

包含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的上述塊,你將需要包括2條ELMAH線,以及部分通常應該包含大部分(如果不是全部)這些元素。

編輯:不再需要,因爲這是現在是默認設置:

對於ELMAH工作,你還需要修改下面一行在你ServiceDefinition.csdef中的文件:

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

+0

我它在我的Vista PC上本地工作,但在實時服務器上它不工作,直到我在web.config的底部添加了2個Elmah行。 雖然我不必進入ServiceDefinition文件。一旦我做出這些更改,我得到了403錯誤,這就是爲什麼你需要設置allowRemoteAccess爲1 – KevinUK 2009-07-06 20:22:13

+0

此外,我使用2012年10月的Azure SDK,並發現我只需要(1)條目,以及(2)上述答案中記錄的.csdef條目。此外,與標準的MVC Web應用程序相比,您可以通過「/ elmah」(取決於您的elmah.mvc.route配置)與Azure MVC Web角色獲得elmah,它將是「/elmah/elmah.axd」。祝你好運。 – Bern 2012-12-13 10:21:03

+0

默認情況下,enableNativeCodeExecution默認設置爲true:http://msdn.microsoft.com/en-us/library/windowsazure/gg557553.aspx – 2013-12-16 22:29:44

9

我想另外(根據@mat1t here的建議)你可能需要設置遠程訪問1:

<elmah> 
<security allowRemoteAccess="0" /> 
.............. 
.............. 
</elmah> 
11

還保護文件,只允許用戶查看錯誤日誌!

<location path="admin/elmah.axd"> 
    <system.web> 
     <authorization> 
      <allow roles="Administrator" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 
相關問題