IIS không tải mô-đun HTTP tùy chỉnh từ web.config


18

Tôi có một mô-đun HTTP tùy chỉnh cho một trang web ASP.NET MVC3 mà tôi đang tải từ web.config:

<system.web>
    <httpModules>
      <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
    </httpModules>
</system.web>

Mô-đun được tải chính xác khi tôi chạy trang web từ bên trong máy chủ web VS (điểm dừng trong phương thức init của tôi bị tấn công) nhưng khi tôi lưu trữ nó trong IIS thì dường như bị bỏ qua (điểm dừng bị bỏ qua và chức năng của mô-đun không có từ trang web). Tôi đã thử nó trên hai hộp IIS riêng biệt với kết quả tương tự.

Tôi đang làm gì sai? Có cài đặt nào tôi phải bật trong khi bật IIS để tải các mô-đun từ web.config của trang web không?

Câu trả lời:


25

Tôi đã tìm ra điều này ngay sau khi tôi đặt câu hỏi - IIS7 sử dụng một lược đồ khác cho web.config. Vị trí chính xác để tải một mô-đun là bây giờ:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>

3
Tôi đã gặp vấn đề tương tự và bài đăng này giúp tôi khắc phục nó. Tôi đã thấy rằng cần phải giữ cả system.web / httpModules và system.webServer / mô-đun để mô-đun tùy chỉnh của tôi hoạt động trên cả máy chủ dev cục bộ và máy chủ sản xuất.
Ido Ran

Ôi! cảm ơn bạn. Tôi đã thực sự đập đầu vào tường trên cái này.
Alex C

3
Có lẽ sự khác biệt không phải là IIS6 so với IIS7 mà là chế độ cổ điển so với chế độ tích hợp.
Jan Zahradník

1

Tôi có một vấn đề tương tự. Giải pháp của tôi liên quan đến việc xóa Mô-đun trước rồi sau đó thêm lại vào không gian tên system.webServer.

<system.webServer>
   <modules>
     <remove name="MyModule"/>
     <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
   </modules>
</system.webServer>

Điều này có thể là do chúng tôi triển khai đến hai máy chủ IIS khác nhau. một trên máy chủ 2003 (iis 6) và một trên máy chủ 2008 (iis7 +). Vì vậy, việc thêm mô-đun để dường như chặn nó tải trong không gian tên. Tôi có thể sai ở đây ...


1

7 năm sau: Nó không dành riêng cho phiên bản IIS, nó dành riêng cho chế độ nhóm ứng dụng: cổ điển so với tích hợp.

  <system.webServer><!--for integrated mode-->
    <modules>
      <add name="modulename" type="blabla.modulenamehere" />
    </modules>
  </system.webServer>

  <system.web><!--for classic mode-->
     <httpModules>
      <add name="modulename" type="blabla.modulenamehere" />
    </httpModules>
  </system.web>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.