การจัดการการตั้งค่าการกำหนดค่าผ่าน 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

ขั้นตอนการดำเนินการทีละขั้นตอน

นี่คือขั้นตอนในการดำเนินการวิธีการนี้:

  1. กำหนดเส้นทางการกำหนดค่า: คุณจะต้องกำหนดเส้นทางไปยังไฟล์การกำหนดค่าของคุณ ซึ่งสามารถอยู่ในรูปสัมพัทธ์กับตำแหน่งของ assembly ของคุณ ตัวอย่างเช่น:

    string strConfigPath = @"..\web.config"; // ปรับเส้นทางตามความจำเป็น
    
  2. สร้าง ConfigurationFileMap: ใช้ ConfigurationFileMap เพื่อชี้ไปยังไฟล์การกำหนดค่าที่กำหนดเองของคุณ:

    System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
    
  3. เปิดการกำหนดค่าที่ถูกแมพ: โหลดการกำหนดค่าด้วยวิธี OpenMappedMachineConfiguration:

    System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
    
  4. กลไกการสำรอง: ติดตั้งกลไกการสำรองเพื่อตรวจสอบว่า 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

การนำวิธีการนี้ไปใช้ทำให้ส่วนของคุณจัดการการตั้งค่าการกำหนดค่าได้อย่างราบรื่น ส่งผลให้แอปพลิเคชันของคุณมีความแข็งแกร่งและสามารถบำรุงรักษาได้มากขึ้น หากคุณมีคำถามเกี่ยวกับวิธีการนี้หรือวิธีการอื่น ๆ ในการจัดการการกำหนดค่า โปรดอย่าลังเลที่จะทิ้งความคิดเห็นไว้ด้านล่าง!