ฉันรู้ว่าคำถามนี้เก่า แต่ฉันต้องการโพสต์คำตอบตามสถานการณ์ปัจจุบันในโลก ASP.NET \ IIS รวมกับประสบการณ์ในโลกแห่งความจริงของฉัน
ฉันเพิ่งเป็นหัวหอกในโครงการที่ บริษัท ของฉันซึ่งฉันต้องการรวมและจัดการการตั้งค่า appSettings & connectionStrings ทั้งหมดในไฟล์ web.config ของเราในที่เดียว ฉันต้องการติดตามแนวทางที่การตั้งค่าการกำหนดค่าของเราถูกเก็บไว้ใน ZooKeeper เนื่องจากโครงการนั้นมีวุฒิภาวะและความเสถียร ไม่ต้องพูดถึงข้อเท็จจริงที่ว่า ZooKeeper คือการออกแบบแอปพลิเคชันการกำหนดค่าและการจัดการคลัสเตอร์
เป้าหมายของโครงการนั้นง่ายมาก
- รับ ASP.NET เพื่อสื่อสารกับ ZooKeeper
- ใน Global.asax, Application_Start - ดึงการตั้งค่า web.config จาก ZooKeeper
เมื่อผ่านชิ้นส่วนทางเทคนิคในการรับ ASP.NET เพื่อคุยกับ ZooKeeper ฉันก็พบและตีกำแพงด้วยรหัสต่อไปนี้อย่างรวดเร็ว
ConfigurationManager.AppSettings.Add(key_name, data_value)
คำสั่งนั้นมีเหตุผลมากที่สุดเนื่องจากฉันต้องการเพิ่มการตั้งค่าใหม่ให้กับคอลเลกชัน appSettings อย่างไรก็ตามตามที่โปสเตอร์ต้นฉบับ (และอื่น ๆ อีกมากมาย) กล่าวถึงการเรียกรหัสนี้จะส่งกลับข้อผิดพลาดที่ระบุว่าคอลเล็กชันเป็นแบบอ่านอย่างเดียว
หลังจากทำการค้นคว้าและได้เห็นวิธีการต่างๆที่บ้าคลั่งที่ผู้คนแก้ไขปัญหานี้ฉันรู้สึกท้อแท้มาก แทนที่จะยอมแพ้หรือตั้งรกรากกับสิ่งที่ดูเหมือนจะเป็นสถานการณ์ที่ไม่เหมาะอย่างยิ่งฉันตัดสินใจเจาะลึกและดูว่าฉันพลาดอะไรไปหรือเปล่า
ด้วยการลองผิดลองถูกเล็กน้อยฉันพบว่าโค้ดต่อไปนี้สามารถตอบสนองสิ่งที่ฉันต้องการได้
ConfigurationManager.AppSettings.Set(key_name, data_value)
ด้วยการใช้โค้ดบรรทัดนี้ตอนนี้ฉันสามารถโหลดคีย์ appSettings ทั้งหมด 85 คีย์จาก ZooKeeper ใน Application_Start ของฉัน
ในส่วนที่เกี่ยวกับข้อความทั่วไปเกี่ยวกับการเปลี่ยนแปลง web.config ที่ทริกเกอร์การรีไซเคิล IIS ฉันแก้ไขการตั้งค่า appPool ต่อไปนี้เพื่อตรวจสอบสถานการณ์เบื้องหลัง
appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True
ด้วยการรวมกันของการตั้งค่าหากกระบวนการนี้ทำให้เกิดการรีไซเคิล appPool ควรมีการบันทึกรายการบันทึกเหตุการณ์ซึ่งไม่ใช่
สิ่งนี้ทำให้ฉันสรุปได้ว่าเป็นไปได้และปลอดภัยจริงๆในการโหลดการตั้งค่าแอปพลิเคชันจากสื่อจัดเก็บข้อมูลส่วนกลาง
ฉันควรพูดถึงว่าฉันใช้ IIS7.5 บน Windows 7 โค้ดจะถูกปรับใช้กับ IIS8 บน Win2012 หากมีสิ่งใดเกี่ยวกับคำตอบนี้เปลี่ยนแปลงฉันจะอัปเดตคำตอบนี้ตามนั้น