โครงสร้างการกำหนดค่า
ไฟล์การกำหนดค่า ASP.NET เรียกว่าไฟล์ Web.config และสามารถปรากฏในหลายไดเรกทอรีภายในแอปพลิเคชัน ASP.NET ลำดับชั้นการกำหนดค่า ASP.NET มีลักษณะดังต่อไปนี้:
ใช้ไฟล์การกำหนดค่าที่ใช้กับทรัพยากรในไดเร็กทอรีซึ่งมีไฟล์การกำหนดค่าอยู่และไดเร็กทอรีย่อยทั้งหมด
ช่วยให้คุณสามารถวางข้อมูลการกำหนดค่าในตำแหน่งที่จะให้ขอบเขตที่เหมาะสม (คอมพิวเตอร์ทั้งหมด เว็บแอปพลิเคชันทั้งหมด แอปพลิเคชันเดียว หรือไดเรกทอรีย่อยภายในแอปพลิเคชันนั้น)
อนุญาตให้ลบล้างการตั้งค่าการกำหนดค่าที่สืบทอดมาจากระดับที่สูงกว่าในลำดับชั้นการกำหนดค่า ยังอนุญาตให้ตั้งค่าการล็อคเพื่อป้องกันไม่ให้ถูกเขียนทับโดยการตั้งค่าการกำหนดค่าระดับล่าง
จัดระเบียบกลุ่มการตั้งค่าคอนฟิกูเรชันแบบลอจิคัลออกเป็นส่วนๆ
การสืบทอดการกำหนดค่า
แอปพลิเคชัน .NET Framework ทั้งหมดสืบทอดการตั้งค่าการกำหนดค่าพื้นฐานและค่าเริ่มต้นจากไฟล์ชื่อ systemrootMicrosoft .NETFrameworkversionNumberCONFIGMachine.config ไฟล์ Machine.config ใช้สำหรับการตั้งค่าการกำหนดค่าระดับเซิร์ฟเวอร์ การตั้งค่าบางอย่างเหล่านี้ไม่สามารถแทนที่ได้ในไฟล์การกำหนดค่าที่อยู่ต่ำกว่าในลำดับชั้น
แอปพลิเคชันไคลเอนต์ .NET (แอปพลิเคชันคอนโซลและ Windows) ใช้ไฟล์การกำหนดค่าชื่อ ApplicationName.config เพื่อแทนที่การตั้งค่าที่สืบทอดมา แอปพลิเคชัน ASP.NET ใช้ไฟล์การกำหนดค่าชื่อ Web.config เพื่อแทนที่การตั้งค่าที่สืบทอดมา
รูทของลำดับชั้นการกำหนดค่า ASP.NET คือไฟล์ที่เรียกว่าไฟล์ Web.config รูท ซึ่งอยู่ในไดเร็กทอรีเดียวกันกับไฟล์ Machine.config ไฟล์ Web.config รากจะสืบทอดการตั้งค่าทั้งหมดจากไฟล์ Machine.config ไฟล์ Web.config รูทประกอบด้วยการตั้งค่าที่ใช้กับแอปพลิเคชัน ASP.NET ทั้งหมดที่ใช้งาน .NET Framework เวอร์ชันเฉพาะ เนื่องจากแอปพลิเคชัน ASP.NET ทุกตัวสืบทอดการตั้งค่าการกำหนดค่าเริ่มต้นจากไฟล์ Web.config รูท คุณจะต้องสร้างไฟล์ Web.config สำหรับการตั้งค่าที่แทนที่การตั้งค่าเริ่มต้นเท่านั้น
การสืบทอดในองค์ประกอบคอลเลกชัน
องค์ประกอบการกำหนดค่าบางอย่างคือคอลเลกชัน เช่น องค์ประกอบเนมสเปซและองค์ประกอบ customErrors
ในคอลเลกชัน โดยปกติการตั้งค่าการกำหนดค่าจะถูกเพิ่มไปยังคอลเลกชันผ่านองค์ประกอบลูกเพิ่ม ลบออกด้วยชื่อคีย์ผ่านองค์ประกอบลูกลบ หรือสามารถล้างคอลเลกชันทั้งหมดผ่านองค์ประกอบลูกที่ชัดเจน เว้นแต่จะอนุญาตให้ทำซ้ำ การตั้งค่าที่เพิ่มในโปรไฟล์ลูกจะแทนที่การตั้งค่าที่มีชื่อคีย์เดียวกันในโปรไฟล์หลัก
โปรดทราบ
ว่าคอลเลกชันบางส่วนที่มีอยู่ใน .NET Framework รุ่นก่อนหน้านี้ใช้ชื่อองค์ประกอบที่แตกต่างกันสำหรับการเพิ่มองค์ประกอบลูก ตัวอย่างเช่น องค์ประกอบ customErrors ใช้องค์ประกอบลูกของข้อผิดพลาดเพื่อเพิ่มข้อผิดพลาดที่กำหนดเองให้กับคอลเลกชัน
หากได้รับคำขอสำหรับไฟล์ที่ไม่มีอยู่ในไดเร็กทอรี SubDir1 ASP.NET จะเริ่มค้นหาลำดับชั้นการกำหนดค่าและเริ่มจากไฟล์ Web.config ในเครื่องส่วนใหญ่ (หากมีอยู่ อาจอยู่ในไดเร็กทอรีปัจจุบันหรือ อาจอยู่ในไดเร็กทอรีปัจจุบัน) ในไดเร็กทอรีหลัก) ASP.NET จะค้นหาองค์ประกอบข้อผิดพลาด (ASP.NET Schema การตั้งค่า) ของ customErrors สำหรับแอตทริบิวต์ statusCode เท่ากับ "404" เมื่อ ASP.NET พบข้อผิดพลาด 404 ในการตั้งค่าคอนฟิก URL ในแอตทริบิวต์การเปลี่ยนเส้นทางจะถูกส่งกลับเป็นการตอบกลับ
ขอบเขตของการตั้งค่าการกำหนดค่า
การตั้งค่าการกำหนดค่ามีขอบเขตที่แตกต่างกัน - บางส่วนมีขอบเขตส่วนกลางและบางส่วนใช้ได้กับขอบเขตแอปพลิเคชันเท่านั้น (ไฟล์ root Web.config หรือไฟล์ Machine.config)
ขอบเขตของส่วนการกำหนดค่าถูกกำหนดไว้สำหรับทุกส่วนที่มีอยู่ใน ASP.NET ในแอตทริบิวต์ AllowDefinition ขององค์ประกอบส่วน configSections (Schema การตั้งค่าทั่วไป) ในไฟล์ Machine.config ตัวอย่างเช่น องค์ประกอบการรับรองความถูกต้อง (ASP.NET Settings Schema) มีแอตทริบิวต์allowDefinitionขององค์ประกอบ MachineToApplication ซึ่งหมายความว่าองค์ประกอบการรับรองความถูกต้องสามารถตั้งค่าได้ในไฟล์ Machine.config ระดับแอปพลิเคชัน ไฟล์ Web.config รูท และไฟล์ Web.config หากตั้งค่าไว้ที่ระดับไดเร็กทอรีย่อย จะเกิดข้อผิดพลาด หากไม่ได้กำหนดแอตทริบิวต์ AllowDefinition สำหรับส่วน ค่าเริ่มต้นคือทุกที่
ขอบเขตของการตั้งค่าการกำหนดค่าสำหรับแต่ละองค์ประกอบในการตั้งค่าการกำหนดค่า ASP.NET และการตั้งค่าการกำหนดค่าทั่วไป (ASP.NET) จะแสดงรายการถัดจากกำหนดค่าได้ในตารางข้อมูลองค์ประกอบ
ตารางต่อไปนี้แสดงรายการระดับของแต่ละไฟล์ในลำดับชั้นการกำหนดค่า ชื่อของแต่ละไฟล์ และคำอธิบายคุณลักษณะที่สำคัญที่สืบทอดมาของแต่ละไฟล์
ชื่อไฟล์ | ระดับการกำหนดค่า | คำอธิบายไฟล์ |
Server | Machine.config | แฟ้ม Machine.config ประกอบด้วย ASP.NET schema สำหรับแอปพลิเคชันเว็บทั้งหมดบนเซิร์ฟเวอร์ แฟ้มนี้อยู่ที่ระดับบนสุดของลำดับชั้นผสานการตั้งค่าคอนฟิก |
root Web | Web.config | จะถูกเก็บไว้ในไดเร็กทอรีเดียวกันกับไฟล์ Machine.config และมีค่าเริ่มต้นสำหรับส่วนการกำหนดค่า system.web ส่วนใหญ่ ณ รันไทม์ ไฟล์นี้จะถูกรวมจากระดับที่สองจากด้านบนในลำดับชั้นการกำหนดค่า |
ไซต์ | Web.config | แฟ้ม Web.config สำหรับไซต์เฉพาะประกอบด้วยการตั้งค่าที่ใช้กับไซต์นั้นและสืบทอดมาจนถึงแอปพลิเคชัน ASP.NET และไดเรกทอรีย่อยทั้งหมดของไซต์นั้น |
ASP.NET Application Root | Web.config | ไฟล์ Web.config สำหรับแอปพลิเคชัน ASP.NET เฉพาะจะอยู่ในไดเร็กทอรีรากของแอปพลิเคชัน ประกอบด้วยการตั้งค่า |
ไดเรกทอรีย่อยของแอปพลิเคชัน ASP.NET | Web.config | แฟ้ม Web.config สำหรับไดเรกทอรีย่อยของแอปพลิเคชันประกอบด้วยการตั้งค่าที่ใช้กับไดเรกทอรีย่อยนี้ และสืบทอดไปยังไดเรกทอรีย่อยทั้งหมดในสาขาของมัน |
ไดเรกทอรีแอปพลิเคชันไคลเอนต์ | ApplicationName.config แฟ้ม ApplicationName.config | ประกอบด้วยการตั้งค่าสำหรับแอปพลิเคชันไคลเอนต์ Windows (ไม่ใช่แอปพลิเคชันบนเว็บ) |
องค์ประกอบ ProcessModel
องค์ประกอบ processModel (ASP.NET Settings Schema) จะกำหนดค่าโมเดลการประมวลผลที่ใช้สำหรับเซิร์ฟเวอร์ (รวมถึงแอปพลิเคชัน ASP.NET ทั้งหมดบนเซิร์ฟเวอร์) ดังนั้น การตั้งค่า processModel สามารถวางได้ในไฟล์ Machine.config เท่านั้น และไม่สามารถแทนที่ได้ด้วยการตั้งค่าในไฟล์ Web.config ใดๆ
การเปลี่ยนแปลงองค์ประกอบ processModel จะมีผลหลังจากรีสตาร์ทกระบวนการของผู้ปฏิบัติงานแล้วเท่านั้น แทนที่จะมีผลทันทีหลังจากการตั้งค่าการเปลี่ยนแปลงเหมือนกับองค์ประกอบการกำหนดค่าอื่นๆ
หมายเหตุ
เมื่อ ASP.NET ทำงานใน Internet Information Services (IIS) 6.0 ในโหมดแยกกระบวนการของผู้ปฏิบัติงาน จะใช้แบบจำลองกระบวนการ IIS 6.0 และการตั้งค่าในส่วน processModel ของแฟ้ม Machine.config จะถูกละเว้น เมื่อต้องการกำหนดค่าข้อมูลประจำตัวของกระบวนการ การวนรอบ หรือค่าแบบจำลองกระบวนการอื่นๆ ให้ใช้ตัวจัดการ IIS เพื่อกำหนดค่ากระบวนการของผู้ปฏิบัติงาน IIS ของแอปพลิเคชัน
การคำนวณรันไทม์ของการตั้งค่าคอนฟิกูเรชัน
เมื่อเซิร์ฟเวอร์ได้รับการร้องขอสำหรับทรัพยากรบนเว็บเฉพาะ ASP.NET จะคำนวณการตั้งค่าคอนฟิกูเรชันสำหรับทรัพยากรนั้นตามลำดับชั้นโดยใช้ไฟล์คอนฟิกูเรชันทั้งหมดที่อยู่ในเส้นทางไดเรกทอรีเสมือนของ URL ที่ร้องขอ การตั้งค่าการกำหนดค่าภายในจะแทนที่การตั้งค่าในไฟล์การกำหนดค่าหลัก
การตั้งค่าเหล่านี้ได้รับการคำนวณเพียงครั้งเดียว จากนั้นจึงแคชไว้สำหรับคำขอครั้งต่อไป ASP.NET จะตรวจสอบการเปลี่ยนแปลงในไฟล์โดยอัตโนมัติและคำนวณแคชใหม่เมื่อไฟล์การกำหนดค่าใดๆ ภายในลำดับชั้นของไฟล์มีการเปลี่ยนแปลง เมื่อเซิร์ฟเวอร์ได้รับการร้องขอสำหรับ URL เฉพาะ ASP.NET จะใช้ลำดับชั้นของการตั้งค่าการกำหนดค่าในแคชเพื่อค้นหาทรัพยากรที่ร้องขอ
เว้นแต่ว่าแอตทริบิวต์ restartOnExternalChanges="false" จะรวมอยู่ในองค์ประกอบส่วนการกำหนดค่า หรือการตั้งค่าการกำหนดค่ามีอยู่ในไฟล์แยกต่างหากที่เชื่อมโยงกับไฟล์ Web.config โดยใช้แอตทริบิวต์ configSource แอปพลิเคชันจะรีสตาร์ทเมื่อการกำหนดค่าเปลี่ยนแปลง
ทรัพยากร ASP.NET หลายตัวที่กำหนดค่าไว้ในไฟล์เดียว
การตั้งค่าการจัดเก็บสำหรับหลายตำแหน่งในไฟล์ Web.config เดียวจะมีประโยชน์เมื่อจัดการการตั้งค่าการกำหนดค่าจำนวนมากหรือการจัดการเว็บไซต์ไคลเอนต์ในการตั้งค่า ISP การใช้แอตทริบิวต์เส้นทางขององค์ประกอบตำแหน่ง คุณสามารถกำหนดค่าทรัพยากร ASP.NET เฉพาะหลายรายการที่จัดเก็บไว้ในไดเรกทอรีย่อยของแอปพลิเคชันได้
สำหรับข้อมูลเกี่ยวกับวิธีการใช้องค์ประกอบตำแหน่ง โปรดดูวิธี: กำหนดค่าไดเร็กทอรีเฉพาะโดยใช้การตั้งค่าตำแหน่ง
การตั้งค่าในไดเรกทอรีเสมือนขัดแย้งกับการตั้งค่าในไดเรกทอรีทางกายภาพ
การตั้งค่าการกำหนดค่าสำหรับไดเรกทอรีเสมือนไม่ขึ้นอยู่กับโครงสร้างไดเรกทอรีทางกายภาพ และไดเรกทอรีเสมือนต้องถูกจัดระเบียบอย่างระมัดระวังเพื่อป้องกันปัญหาการกำหนดค่า ตัวอย่างเช่น คุณอาจมีไฟล์ ASP.NET ชื่อ MyResource.aspx โดยมีโครงสร้างไดเร็กทอรีทางกายภาพต่อไปนี้
C:
Subdir1
Subdir2
MyResource.aspx
นอกจากนี้ คุณอาจมีไฟล์การกำหนดค่าอยู่ที่ Subdir1 ไดเรกทอรีเสมือนชื่อ Vdir1 ที่แมปกับ c:Subdir1 และไดเรกทอรีเสมือนชื่อ Vdir1 ที่แมปกับ c:Subdir1Subdir2 เสมือน ไดเร็กทอรีของ Vdir2. หากไคลเอ็นต์ใช้ URL http://localhost/vdir1/subdir2/MyResource.aspx เพื่อเข้าถึงทรัพยากรที่อยู่ทางกายภาพที่ c:Subdir1Subdir2MyResource.aspx ทรัพยากรจะสืบทอดการตั้งค่าการกำหนดค่าจาก Vdir1 อย่างไรก็ตาม หากไคลเอ็นต์เข้าถึงทรัพยากรเดียวกันโดยใช้ URL http://localhost/vdir2/MyResource.aspx ทรัพยากรจะไม่สืบทอดการตั้งค่าจาก Vdir1 การสร้างไดเร็กทอรีเสมือนในลักษณะนี้อาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดหรือแม้กระทั่งทำให้แอปพลิเคชันล้มเหลว ขอแนะนำให้คุณอย่าซ้อนไดเร็กทอรีเสมือน และหากจำเป็น ให้ใช้ไฟล์ Web.config เพียงไฟล์เดียว
การจำกัดการสืบทอด ASP.NET
คุณอาจต้องการจำกัดการสืบทอดของการตั้งค่าการกำหนดค่าเพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน รักษาความน่าเชื่อถือสูง และทำให้การดูแลระบบง่ายขึ้น ฟังก์ชันการจำกัดถูกควบคุมโดยคุณสมบัติ AllowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem และ lockElements ดู msdn สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติเหล่านี้