2009-06-02 42 views
35

Tôi có vai trò web ASP.NET MVC chạy trên Windows Azure và đã thiết lập ELMAH đúng cách trong web.config. Tôi cũng có global.asax của tôi bỏ qua * .axd tuyến đường. Tại địa phương, tôi có thể tải /elmah.axd, tuy nhiên khi tôi triển khai Azure, tôi nhận được 404 trên trang đó. Có ai nhận được ELMAH làm việc trên Azure?Làm thế nào để cấu hình ELMAH để làm việc với Windows Azure? Tôi nhận được 404 trên Elmah.axd

+0

Xem thêm http://stackoverflow.com/questions/2118248/asp-net-mvc-elmah-not-working-and-returning-404-page-for-elmah-axd/5205564 –

Trả lời

25

Azure dựa trên Windows Server 2008 và IIS7. Điều này có nghĩa là bạn cần điền phần system.webServer của tệp web.config.

Các tập tin mẫu kèm theo mã nguồn ELMAH chứa các chi tiết mà bạn cần để đưa vào.

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

Có 2 dòng ELMAH trong khối trên của xml mà bạn sẽ cần phải bao gồm, và phần nói chung nên chứa hầu hết nếu không phải tất cả các yếu tố đó.

EDIT: Không còn cần thiết vì đây là bây giờ theo mặc định:

Đối ELMAH để làm việc bạn cũng sẽ cần phải sửa đổi dòng sau trong file ServiceDefinition.csdef của bạn:

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

+0

tôi đã nó hoạt động cục bộ trên máy tính Vista của tôi nhưng trên máy chủ trực tiếp, nó không hoạt động cho đến khi tôi thêm 2 dòng Elmah mà bạn đề cập ở dưới cùng của web.config. Mặc dù vậy, tôi không phải đi vào tệp ServiceDefinition. Khi tôi thực hiện những thay đổi đó, tôi đã nhận được lỗi 403, đó là lý do tại sao bạn cần đặt allowRemoteAccess thành 1 – KevinUK

+0

Hơn nữa, tôi sử dụng SDK Azure tháng 10 năm 2012 và thấy rằng tôi chỉ cần (1) mục nhập và (2) mục nhập .csdef được ghi chú trong câu trả lời ở trên. Cũng so với một ứng dụng web MVC tiêu chuẩn nơi bạn có thể truy cập elmah thông qua "/ elmah" (tùy thuộc vào cấu hình elmah.mvc.route) của bạn với vai trò web Azure MVC, nó sẽ là "/elmah/elmah.axd". Chúc may mắn. – Bern

+0

enableNativeCodeExecution được đặt thành true theo anyways mặc định: http://msdn.microsoft.com/en-us/library/windowsazure/gg557553.aspx –

9

tôi nghĩ rằng bổ sung (những gì được đề xuất bởi @mat1t here), bạn có thể cần phải thiết lập truy cập từ xa đến 1:

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

cảm ơn, bước này là hoàn toàn cần thiết –

11

Đồng thời bảo mật tệp để chỉ người dùng được phép mới có thể xem nhật ký lỗi!

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

Có một tùy chọn web.config cho điều này: mà nên chăm sóc này . – Bern

Các vấn đề liên quan