IIS ไม่โหลดโมดูล HTTP ที่กำหนดเองจาก web.config


18

ฉันมีโมดูล HTTP ที่กำหนดเองสำหรับเว็บไซต์ ASP.NET MVC3 ที่ฉันโหลดจาก web.config:

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

โหลดโมดูลได้อย่างถูกต้องเมื่อฉันเรียกใช้ไซต์จากภายในเว็บเซิร์ฟเวอร์ VS (จุดพักในวิธีการเริ่มต้นของฉันถูกกด) แต่เมื่อฉันโฮสต์ใน IIS ดูเหมือนว่าจะถูกละเว้น (ขาดจุดหยุดและฟังก์ชันการทำงานของโมดูลขาด จากเว็บไซต์) ฉันได้ลองในกล่อง IIS แยกกันสองกล่องโดยมีผลลัพธ์คล้ายกัน

ผมทำอะไรผิดหรือเปล่า? มีการตั้งค่าที่ฉันต้องสะบัดในการเปิดใช้งาน IIS โหลดโมดูลจาก web.config ของเว็บไซต์หรือไม่

คำตอบ:


25

ฉันคิดออกไม่นานหลังจากที่ฉันถามคำถาม - IIS7 ใช้ schema ที่แตกต่างกันสำหรับ web.config ตำแหน่งที่ถูกต้องในการโหลดโมดูลคือ:

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

3
พบปัญหาเดียวกันนี้และโพสต์นี้ช่วยฉันแก้ไข ฉันพบว่าจำเป็นต้องใช้ทั้ง system.web / httpModules และ system.webServer / modules เพื่อให้โมดูลที่กำหนดเองของฉันทำงานได้ทั้งบนเซิร์ฟเวอร์ dev ในเครื่องและเซิร์ฟเวอร์ที่ใช้งานจริง
Ido Ran

ว้าว! ขอขอบคุณ. ฉันต่อสู้หัวของฉันกับผนังของอันนี้
Alex C

3
ความแตกต่างอาจไม่ใช่ IIS6 กับ IIS7 แต่เป็นโหมดคลาสสิคและรวม
Jan Zahradník

1

ฉันมีปัญหาที่คล้ายกัน โซลูชันของฉันเกี่ยวข้องกับการนำโมดูลออกก่อนแล้วจึงเพิ่มลงใน system.webServer เนมสเปซอีกครั้ง

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

อาจเป็นเพราะเราปรับใช้กับเซิร์ฟเวอร์ IIS สองเครื่อง หนึ่งรายการบนเซิร์ฟเวอร์ 2003 (iis 6) และอีกหนึ่งรายการบนเซิร์ฟเวอร์ 2008 (iis7 +) ดังนั้นการเพิ่มโมดูลที่ดูเหมือนจะป้องกันไม่ให้โหลดในเนมสเปซ ฉันผิดที่นี่ ...


1

7 ปีต่อมา: ไม่เฉพาะเจาะจงกับเวอร์ชั่น IIS มันเป็นโหมดเฉพาะของแอพพลิเคชั่นพูลแอพพลิเคชั่น: แบบคลาสสิคและแบบรวม

  <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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.