การจัดการการตั้งค่าการกำหนดค่าผ่าน ASP.NET และ Classic ASP
ในฐานะที่เราเป็นนักพัฒนาเว็บ หนึ่งในความท้าทายอย่างต่อเนื่องคือการจัดการการตั้งค่าการกำหนดค่าอย่างมีประสิทธิภาพ โดยเฉพาะเมื่อพัฒนาองค์ประกอบที่ให้บริการทั้งหน้า Classic ASP และ ASP.NET ในหลายกรณี เราพึ่งพาไฟล์ต่าง ๆ เช่น web.config
เพื่อบรรจุการตั้งค่าเหล่านี้ แต่เมื่อจัดการกับหน้า Classic ASP องค์ประกอบของเราจะถูกเรียกผ่าน COM interop ทำให้การเข้าถึง web.config
โดยตรงเป็นเรื่องที่ยากลำบาก
ในโพสต์นี้ เราจะสำรวจวิธีการแก้ปัญหาอย่างง่ายในการปรับแต่ง ConfigurationManager
เพื่อโหลดการตั้งค่าการกำหนดค่าจากตำแหน่งที่กำหนด วิธีการนี้ช่วยให้คุณสามารถรักษาความยืดหยุ่นในขณะที่มั่นใจว่าการตั้งค่าการกำหนดค่าของคุณยังคงเข้าถึงได้
ปัญหา: การเข้าถึงการกำหนดค่าในสภาพแวดล้อมที่ผสมกัน
เมื่อองค์ประกอบการเข้าถึงข้อมูลของคุณถูกเรียกจากหน้า Classic ASP มันจะทำงานภายนอกบริบทการร้องขอของ ASP.NET ซึ่งนำไปสู่ความท้าทายดังต่อไปนี้:
- ไม่มีการเข้าถึง
web.config
โดยอัตโนมัติ: องค์ประกอบไม่สามารถเรียกคืนการตั้งค่าจากweb.config
ของแอปพลิเคชัน ASP.NET เพราะมันไม่ตระหนักถึงบริบท HTTP - ค่าที่อาจเป็น Null: เมื่อใช้
ConfigurationManager.GetSection
คุณอาจได้รับการตอบสนองเป็นnull
สำหรับส่วนการกำหนดค่าที่กำหนดเองของคุณ ซึ่งจำกัดฟังก์ชันการทำงานขององค์ประกอบของคุณ
วิธีแก้ปัญหาที่เสนอ: โหลดการกำหนดค่าจากเส้นทางที่กำหนด
ในการแก้ไขความท้าทายนี้ เราสามารถใช้ ConfigurationManager
พร้อมกับ ConfigurationFileMap
ซึ่งช่วยให้เรากำหนดเส้นทางไฟล์การกำหนดค่าที่กำหนดเอง ซึ่งในกรณีนี้คือ web.config
แม้องค์ประกอบจะถูกเรียกจาก Classic ASP
ขั้นตอนการดำเนินการทีละขั้นตอน
นี่คือขั้นตอนในการดำเนินการวิธีการนี้:
-
กำหนดเส้นทางการกำหนดค่า: คุณจะต้องกำหนดเส้นทางไปยังไฟล์การกำหนดค่าของคุณ ซึ่งสามารถอยู่ในรูปสัมพัทธ์กับตำแหน่งของ assembly ของคุณ ตัวอย่างเช่น:
string strConfigPath = @"..\web.config"; // ปรับเส้นทางตามความจำเป็น
-
สร้าง ConfigurationFileMap: ใช้
ConfigurationFileMap
เพื่อชี้ไปยังไฟล์การกำหนดค่าที่กำหนดเองของคุณ:System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
-
เปิดการกำหนดค่าที่ถูกแมพ: โหลดการกำหนดค่าด้วยวิธี
OpenMappedMachineConfiguration
:System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
-
กลไกการสำรอง: ติดตั้งกลไกการสำรองเพื่อตรวจสอบว่า
ConfigurationManager.GetSection
ส่งคืนnull
หรือไม่ ถ้าใช่ ให้ใช้การกำหนดค่าที่โหลดจากเส้นทางที่กำหนดของคุณ
โค้ดตัวอย่าง
นี่คือตัวอย่างโค้ดที่สรุปเพื่อทำตามขั้นตอนข้างต้น:
public class ConfigurationHelper
{
public static T GetCustomConfigurationSection<T>(string path) where T : ConfigurationSection
{
string strConfigPath = path; // เส้นทางไปยังไฟล์การกำหนดค่าของคุณ
System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
// พยายามรับส่วนการกำหนดค่า
var section = (T)configuration.GetSection(typeof(T).Name);
// ตรวจสอบว่าส่วนนี้เป็น null หรือไม่และตัดสินใจเกี่ยวกับกลไกการสำรองหากจำเป็น
return section ?? default(T);
}
}
บทสรุป
โดยการปฏิบัติตามขั้นตอนที่ระบุข้างต้น คุณสามารถใช้ ConfigurationManager
เพื่อโหลดข้อมูลการกำหนดค่าจากตำแหน่งใดก็ได้ นี่เป็นสิ่งที่มีประโยชน์โดยเฉพาะเมื่อทำงานกับแอปพลิเคชันที่มีการผสมผสานระหว่าง Classic ASP และ ASP.NET
การนำวิธีการนี้ไปใช้ทำให้ส่วนของคุณจัดการการตั้งค่าการกำหนดค่าได้อย่างราบรื่น ส่งผลให้แอปพลิเคชันของคุณมีความแข็งแกร่งและสามารถบำรุงรักษาได้มากขึ้น หากคุณมีคำถามเกี่ยวกับวิธีการนี้หรือวิธีการอื่น ๆ ในการจัดการการกำหนดค่า โปรดอย่าลังเลที่จะทิ้งความคิดเห็นไว้ด้านล่าง!