IIS7 - ข้อผิดพลาดการล็อกการล็อกตัวจัดการ HTTP โมดูลและองค์ประกอบ <clear />


18

ฉันมีเว็บไซต์ ASP.NET ที่ใช้ชุดตัวจัดการ HTTP ของตัวเองและไม่ต้องการโมดูลใด ๆ

ดังนั้นใน IIS6 สิ่งที่ฉันต้องทำคือใน web.config ของฉัน:

<httpModules>
    <clear />
</httpModules>

อย่างไรก็ตามถ้าฉันพยายามทำเช่นเดียวกันในsystem.webServerพื้นที่สำหรับ IIS7 ฉันได้รับข้อผิดพลาด 500 เมื่อฉันพยายามดูไซต์และในตัวจัดการ IIS เมื่อฉันพยายามดูการแมปตัวจัดการฉันได้รับกล่องป๊อปอัปพร้อมข้อความ:

มีข้อผิดพลาดขณะทำการดำเนินการนี้

รายละเอียด:

ชื่อไฟล์:

\ \ C: \ ไซต์ \ TheWebSiteGoesHere \ web.config

หมายเลขบรรทัด: 39

ข้อผิดพลาด: ล็อคการละเมิด

บรรทัดที่ 39 คือ<clear />องค์ประกอบ

googling ทำให้ฉันมีวิธีการแก้ปัญหาที่เกี่ยวข้องกับการใช้คำสั่งนี้

%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules

... แต่นั่นไม่ได้แก้ปัญหา

คำตอบ:


11

นั่นคือจากการออกแบบ ส่วนของ system.webServer นั้นเป็นตัวกำหนด IIS เอง หากคุณคุณจะไม่เหลืออะไรเลย ใน applicationHost.config คุณควรมีดังนี้:

        <modules>
            <add name="HttpCacheModule" lockItem="true" />
            <add name="DynamicCompressionModule" lockItem="true" />
            <add name="StaticCompressionModule" lockItem="true" />
            <add name="DefaultDocumentModule" lockItem="true" />
            <add name="DirectoryListingModule" lockItem="true" />
            <add name="IsapiFilterModule" lockItem="true" />
            <add name="ProtocolSupportModule" lockItem="true" />
            <add name="HttpRedirectionModule" lockItem="true" />
            <add name="StaticFileModule" lockItem="true" />
            ...

สังเกตเห็นคุณสมบัติ lockItem เนื่องจากมีรายการล็อคตั้งแต่ 1 รายการขึ้นไปจะเป็นการละเมิดการล็อค

ดังนั้นคุณต้องลบเฉพาะรายการที่คุณไม่ต้องการจาก web.config หรือถ้าคุณต้องการล้างทั้งหมดและเพิ่มกลับของคุณเองจากนั้นใน applicationHost.config ลบ lockItem = "true" บน แต่ละองค์ประกอบเหล่านั้นและตรวจสอบให้แน่ใจว่าได้เพิ่มองค์ประกอบเหล่านั้นมากพอเพื่อให้เว็บเซิร์ฟเวอร์ของคุณใช้งานได้จริง

แก้ไข

(ต่อท้ายข้อมูลเพิ่มเติมจาก Daniel ตามคำขอของเขา (Scott))

นี่คือสิ่งที่ฉันทำตามสิ่งที่สกอตต์กล่าวว่า:

เปิด applicationHost.config ใน% windir% \ system32 \ inetsrv \ config โปรดทราบว่าใน Windows Server 2008 64 บิตคุณจะต้องแก้ไขไฟล์ด้วยตัวแก้ไข 64 บิต (Notepad ดั้งเดิมจะทำ แต่ Notepad ++ จะไม่สามารถค้นหาไฟล์ได้) ดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้

ในองค์ประกอบเปลี่ยนแอตทริบิวต์ lockItem บนโมดูลทั้งหมดเป็นเท็จ

ในไฟล์ web.config ของเว็บแอปพลิเคชันของฉันสามารถทำสิ่งต่อไปนี้ได้:

<system.webServer>
   <modules>
      <clear />
   </modules>
</system.webServer>

แน่นอนว่าเมื่อสก็อตต์ชี้ให้เห็นนั่นหมายความว่าไม่มีเว็บเซิร์ฟเวอร์เหลืออยู่ดังนั้นนี่คือชุดโมดูลขั้นต่ำที่ฉันต้องการเพื่อให้ข้อมูลของฉันทำงานอีกครั้ง (YMMV):

<add name="HttpRedirectionModule" lockItem="false" />

<add name="StaticFileModule" lockItem="false" />

<add name="CustomLoggingModule" lockItem="false" />

<add name="CustomErrorModule" lockItem="false" />

<add name="IsapiModule" lockItem="false" />

<add name="AnonymousAuthenticationModule" lockItem="false" />

นอกจากนี้สำหรับผู้ที่สนใจนี่คือเรื่องราวเบื้องหลังว่าทำไมฉันถึงทำเช่นนี้


2

สกอตต์คุณสามารถต่อท้ายคำตอบของคุณได้ไหม?

นี่คือสิ่งที่ฉันทำตามสิ่งที่สกอตต์กล่าวว่า:

  1. เปิดในapplicationHost.config %windir%\system32\inetsrv\configโปรดทราบว่าใน Windows Server 2008 64 บิตคุณจะต้องแก้ไขไฟล์ด้วยตัวแก้ไข 64 บิต (Notepad ดั้งเดิมจะทำ แต่ Notepad ++ จะไม่สามารถค้นหาไฟล์ได้) ดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้

  2. ใน<system.webServer>องค์ประกอบเปลี่ยนแอตทริบิวต์ในโมดูลทั้งหมดไปlockItemfalse

  3. ในไฟล์ web.config ของเว็บแอปพลิเคชันของฉันสามารถทำสิ่งต่อไปนี้ได้:

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. แน่นอนว่าเมื่อสก็อตต์ชี้ให้เห็นนั่นหมายความว่าไม่มีเว็บเซิร์ฟเวอร์เหลืออยู่ดังนั้นนี่คือชุดโมดูลขั้นต่ำที่ฉันต้องการเพื่อให้ข้อมูลของฉันทำงานอีกครั้ง (YMMV):

    <add name="HttpRedirectionModule" lockItem="false" />

    <add name="StaticFileModule" lockItem="false" />

    <add name="CustomLoggingModule" lockItem="false" />

    <add name="CustomErrorModule" lockItem="false" />

    <add name="IsapiModule" lockItem="false" />

    <add name="AnonymousAuthenticationModule" lockItem="false" />

นอกจากนี้สำหรับทุกคนที่สนใจ, นี่คือเบื้องหลังว่าทำไมฉันทำเช่นนี้


ขออภัยเกี่ยวกับการจัดรูปแบบบิตสุดท้าย ... ด้วยเหตุผลบางอย่างมันจะไม่แสดงในรูปแบบ "รหัส" ปกติ
Daniel Schaffer

แน่นอนค่ะ เพิ่งเพิ่มเข้าไป
Scott Forsyth - MVP

2

ฉันหวังว่ามันจะไม่สายเกินไปที่จะช่วย

ฉันมีปัญหานี้วันนี้และแก้ไขปัญหาการแก้ไขตามโหนด ApplicationHost.Config XML:

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"

ลบที่ ", defaultPath" และรีสตาร์ทคุณ IIS (iisreset)

ฉันหวังว่ามันจะเป็นประโยชน์


0

ลองลบ web.config เดิมของคุณ (สร้างการสำรองข้อมูล) และหลังจากทำการเปลี่ยนแปลงผ่าน IIS (จะสร้าง web.config ใหม่) เรียกคืนการเปลี่ยนแปลงเดิม ในกรณีที่คุณกำหนดค่า HTTP ERRORs ให้ทำตามhttp://paymentgatewayintegrationhelp.com/Tech-Help/HTTP-Errors-and-webconfig-Lock-Violation-1140.aspนี้

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