IIS 7.5 - ปิดใช้งานคุณสมบัติการรีไซเคิลที่ซ้อนทับกันซึ่งไม่ได้ถูกเชื่อฟังเมื่อมีการอัปเดต web.config


25

ฉันมีเว็บไซต์ที่มีการล็อคพิเศษในทรัพยากรบางอย่าง ฉันใช้. NET Application_Start และ Application_End เหตุการณ์เพื่อรับและปล่อยการล็อกทรัพยากรเหล่านี้ในเวลาที่เหมาะสม เพื่อให้ทำงานได้อย่างถูกต้องจะมีเพียงหนึ่งอินสแตนซ์ของแอปพลิเคชันของฉันที่ทำงานในเวลาที่กำหนด

ที่จะได้รับนี้จะเกิดขึ้นฉันได้ตั้งค่าทรัพย์สินในสระว่ายน้ำของโปรแกรมประยุกต์เพื่อDisable Overlapped Recycle Trueคุณสมบัตินี้ควรให้แน่ใจว่ากระบวนการของผู้ปฏิบัติงานเก่าจะปิดตัวลงอย่างสมบูรณ์ก่อนที่จะเริ่มกระบวนการใหม่เมื่อใดก็ตามที่กลุ่มแอพนั้นถูกรีไซเคิล สิ่งนี้จะทำงานได้ดีทุกครั้งที่มีการรีไซเคิลแอพด้วยตนเองผ่าน IIS โดยอัตโนมัติตามผลลัพธ์ของการไม่ได้ใช้งานเวลาว่างหรือโดยอัตโนมัติตามกฎเวลา / ช่วงเวลาที่เฉพาะเจาะจง

อย่างไรก็ตามเมื่อ web.config สำหรับไซต์ได้รับการอัปเดตกฎนี้จะไม่ถูกนำมาใช้ - กระบวนการของผู้ปฏิบัติงานใหม่จะเริ่มขึ้นก่อนที่กระบวนการเก่าจะเสร็จสิ้น สิ่งนี้ทำให้สิ่งเลวร้ายเกิดขึ้น ฉันได้Disable Recycling for Configuration Changesตั้งค่าคุณสมบัติFalseเป็นฉันต้องการให้กลุ่มแอพนำกลับมาใช้ใหม่เมื่อมีการอัปเดต web.config - สิ่งนี้เกิดขึ้นบ่อยครั้งในระหว่างการพัฒนา

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

ปรับปรุง:

เพื่อความชัดเจนมากขึ้นเมื่อstartมีการเรียกเหตุการณ์กระบวนการของผู้ปฏิบัติงานใหม่ก่อนที่กระบวนการของผู้ปฏิบัติงานเก่าจะปิดตัวลงดังนั้นendกิจกรรมกระบวนการของผู้ปฏิบัติงานเก่าจะไม่ถูกเรียก - มันไม่ได้เกิดขึ้นตามลำดับมันไม่เคยเกิดขึ้นเลย


ระยะเวลาหลังจาก web.config ถูกอัพเดตก่อนที่กระบวนการของผู้ปฏิบัติงานใหม่จะเริ่มขึ้น
Greg Askew

กระบวนการของผู้ปฏิบัติงานใหม่จะเริ่มขึ้นทันทีที่ฉันพยายามเข้าถึงไซต์หลังจากรีไซเคิล - น้อยกว่าหนึ่งวินาทีถ้าฉันรวดเร็ว หากปล่อยทิ้งไว้เหตุการณ์ 'ปิดเครื่อง' ของผู้ปฏิบัติงานเก่าจะเกิดขึ้นที่ 20-30 วินาทีหลังจากการรีไซเคิล
John

ฉันมีปัญหาเดียวกัน มีการทับซ้อนกัน
Andrew Rimmer

11
การแก้ไขไฟล์ web.config ทำให้ appDomain โหลดซ้ำ appDomain แยกจาก AppPool คุณไม่ควรเห็นรหัสกระบวนการ W3WP ใหม่เพียงแค่เปลี่ยน web.config ดูที่นี่treeloop.com/blog/iis-application-domain-and-pool-recycling
kOLD

1
@kheld ถูกต้องอย่างแน่นอน (อาจเพิ่มเป็นคำตอบ) นี่ไม่ใช่ appool เหลื่อมกันมันเป็น appDomain เหลื่อมกัน ฉันไม่เชื่อว่าคุณสามารถหยุดสิ่งนี้ได้ แต่คุณสามารถปิดการใช้งานการรีไซเคิลโดเมนแอปได้
Sam Cogan

คำตอบ:


1

จากโพสต์ MSDN นี้: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

เพื่อเป็นส่วนหนึ่งของกระบวนการปรับใช้โค้ดดูเหมือนว่ากลุ่มของคุณจะรีไซเคิลเมื่อคุณปรับใช้การเปลี่ยนแปลงอย่างใดอย่างหนึ่งต่อไปนี้:

รีไซเคิลทันที

  • Web.config เปลี่ยนแปลง
  • Machine.config เปลี่ยนแปลง
  • การเปลี่ยนแปลง Global.asax
  • ช่องเก็บการเปลี่ยนแปลงไดเรกทอรี
  • การเปลี่ยนแปลง App_Code

( ยืมมาจาก: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

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