ความจริงแล้วฉันได้ลองเปลี่ยนเล่ห์เหลี่ยมสกปรกบน IIS และเมื่อฉันคิดว่าฉันจะหลบไปกับมันฉันรู้ว่าวิธีแก้ปัญหาของฉันไม่ทำงาน นี่คือสิ่งที่ฉันพยายามทำ:
1) ฉันมีแอพพลิเคชั่น ASP.NET ซึ่งมีคลาสPreloaderที่สืบทอดIProcessHostPreloadClientและทำการเริ่มต้นอย่างหนักทั้งหมดในการใช้วิธีPreload (แอพพลิเคชั่นมีความซับซ้อนและเป็นส่วนหนึ่งของระบบมหาศาลดังนั้นต้องใช้เวลาประมาณ 2 นาทีในการสร้างการเชื่อมต่อ บริการและยกตัวอย่างการลงทะเบียน Unity ล่วงหน้าบางส่วน)
2) ฉันมีจำนวนมากของการทำงานที่จะต้องทำในปิดโปรแกรม (ยกเลิกการถอด, กำจัด, ... ) และผมคิดว่าสถานที่ที่ดีที่สุดที่จะทำมันอยู่ใน * * * * * * * * วิธีการ Application_End อยู่ในGlobal.asax
3) ทุกอย่างใช้งานได้ดีเมื่อฉันมีกิจกรรมของผู้ใช้ (คำขอแรกหลังจาก Application Pool ที่มีเว็บแอ็พพลิเคชันดังกล่าวเริ่มต้นขึ้นจะทำให้ * Application_Start * ถูกเรียกและหลังจากนั้น * Application_End * ถูกเรียกใช้ใน Application Pool หยุดหรือรีไซเคิล) เกิดขึ้นเมื่อไม่มีกิจกรรมของผู้ใช้และแอปพลิเคชันพยายามรีสตาร์ทตัวเองหลังจากใช้งานเป็นเวลา 48 ชั่วโมง (ข้อกำหนดที่กำหนดค่าไว้) เนื่องจากไม่มีคำขอแอปพลิเคชันจึงไม่เริ่มต้นอย่างเป็นทางการ ดังนั้นมันไม่สามารถหยุดได้อย่างสวยงามเนื่องจาก * Application_End * จะไม่ถูกเรียกใช้
4) ส่วนที่ยุ่งเหยิงมาแล้ว ... ฉันได้พยายามขอ GET จากรหัสที่ส่วนท้ายของวิธีPreloadและใช้งานได้ แต่วิธีนี้ดูเหมือนจะไม่ดีสำหรับฉันแม้ว่ามันจะใช้งานได้ ดังนั้นฉันลองหลายสิ่งหลายอย่างและสิ่งสุดท้ายที่ฉันลองทำคือ:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... และนั่นก็เป็นไปตามวัตถุประสงค์ * Application_Start * ถูกเรียก (ฉันตรวจสอบการตอบกลับแล้วมันมีหน้าล็อกอินที่ควรแสดงในคำขอเริ่มต้น) และในแอปพลิเคชันการปิดระบบ Application Pool สิ้นสุดลงอย่างสง่างามโดยทำงานที่จำเป็นใน * Application_End *
แต่
หลังจากที่แอปพลิเคชันเริ่มต้น (โหลดล่วงหน้าและเริ่มต้น) ในลักษณะนี้นี่คือสิ่งที่เกิดขึ้นเมื่อฉันต้องการเข้าถึงแอปพลิเคชันผ่านเว็บเบราว์เซอร์:
HTTP Error 500.21 - ตัวจัดการข้อผิดพลาดเซิร์ฟเวอร์ภายใน "ExtensionlessUrlHandler-Integrated-4.0" มีโมดูล "ManagedPipelineHandler" ที่ไม่ดีในรายการโมดูล
ฉันไม่สามารถเข้าใจสิ่งนี้ได้ ใครสามารถบอกฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นและจะแก้ไขได้อย่างไร
หากฉันไม่เข้าใจปัญหานี้ฉันจะกลับไปที่โซลูชันแรก (ส่งคำขอ GET จากรหัส) แต่ปัญหานี้จะทำให้ฉันผิดเพราะฉันไม่มีความคิดที่ผิด