การแก้ไขปัญหาข้อผิดพลาดการกำหนดค่าการอ้างอิง NULL ของ Enterprise Library CacheFactory.GetCacheManager

เมื่ออัปเกรดแอปพลิเคชันจากเวอร์ชันเก่าของเฟรมเวิร์กซอฟต์แวร์ นักพัฒนามักพบปัญหาการกำหนดค่าที่อาจทำให้เกิดข้อผิดพลาดที่น่าหงุดหงิด เช่น ข้อยกเว้นการอ้างอิง NULL หนึ่งในสถานการณ์ที่พบได้บ่อยเกิดขึ้นขณะย้ายจากเวอร์ชัน 1.1 ไปยัง 2.0 ของ Enterprise Library Caching block หากคุณประสบปัญหาการอ้างอิง NULL เมื่อเรียกใช้ CacheFactory.GetCacheManager คุณไม่ได้อยู่คนเดียว มาสำรวจปัญหาที่อยู่เบื้องหลังและวิธีการที่มีประสิทธิภาพในการแก้ไขปัญหาการกำหนดค่าเหล่านี้กัน

การทำความเข้าใจกับปัญหา

อย่างที่คุณอาจทราบแล้ว การเปลี่ยนผ่านจาก Enterprise Library 1.1 เป็น 2.0 มีการเปลี่ยนแปลงที่สำคัญในวิธีการจัดการการกำหนดค่า ในเวอร์ชันก่อนหน้านี้ การกำหนดค่ามักจัดการผ่าน ConfigurationManagerSectionHandler แต่แนวทางนี้ได้กลายเป็นสิ่งล้าสมัยและเปลี่ยนเป็นกลไกการกำหนดค่าที่มีอยู่ใน .NET 2.0 ที่มีความเรียบง่ายมากขึ้น

ปัญหาเฉพาะ

ในกรณีของคุณ ปัญหาดูเหมือนจะเกิดจากการแบ่งการกำหนดค่าไปยังไฟล์ต่าง ๆ การเปลี่ยนแปลงนี้อาจทำให้แกนของ .NET ไม่สามารถค้นหาการตั้งค่าการกำหนดค่าที่จำเป็นได้ ทำให้เกิดข้อยกเว้นการอ้างอิง NULL เมื่อพยายามเข้าถึงผู้จัดการแคช

แนวทางแก้ไข: การกำหนดค่า CacheManager ด้วยไฟล์การกำหนดค่าภายนอก

ข่าวดี! การตั้งค่าบล็อกการแคชของ Enterprise Library ด้วยไฟล์การกำหนดค่าภายนอกนั้นค่อนข้างตรงไปตรงมาหลังจากที่คุณเข้าใจไวยากรณ์ที่จำเป็น นี่คือวิธีการแบบทีละขั้นตอนที่จะช่วยให้คุณตั้งค่าการกำหนดค่าได้อย่างถูกต้อง

ขั้นตอนที่ 1: แก้ไขไฟล์ Web.config ของคุณ

เริ่มต้น คุณจะต้องระบุแหล่งข้อมูลการกำหนดค่าภายนอกในไฟล์ Web.config หลักของคุณ นี่คือวิธีการ:

<cachingConfiguration configSource="cachingconfiguration.config" />

ขั้นตอนที่ 2: สร้างไฟล์การกำหนดค่าภายนอก

ถัดไป คุณจะสร้างไฟล์การกำหนดค่าภายนอกชื่อ cachingconfiguration.config นี่คือตัวอย่างโครงสร้างที่คุณสามารถใช้:

<?xml version="1.0" encoding="utf-8"?>
<cachingConfiguration defaultCacheManager="Default Cache Manager">
    <backingStores>
        <add name="inMemory" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching" />
    </backingStores>
    <cacheManagers>
        <add name="Default Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="50" numberToRemoveWhenScavenging="10" backingStoreName="inMemory" />
    </cacheManagers>
</cachingConfiguration>

ขั้นตอนที่ 3: ตรวจสอบการกำหนดค่าของคุณ

  1. ตรวจสอบการอ้างอิงไฟล์: ให้ตรวจสอบว่า cachingconfiguration.config ถูกอ้างถึงอย่างถูกต้องในโปรเจ็กต์ของคุณและถูกวางไว้ในไดเรกทอรีหรือโฟลเดอร์ที่แอปพลิเคชันของคุณสามารถเข้าถึงได้

  2. ทดสอบแอปพลิเคชัน: หลังจากทำการแก้ไขแล้ว ให้เรียกใช้แอปพลิเคชันของคุณอีกครั้งเพื่อตรวจสอบว่าข้อผิดพลาดการอ้างอิง NULL ยังคงมีอยู่หรือไม่ อำนวยความสะดวกในการตั้งค่าความอนุญาตที่จำเป็นหากไฟล์ถูกเก็บไว้ข้างนอกไดเรกทอรีแอปพลิเคชัน

ขั้นตอนที่ 4: แก้ไขปัญหาต่อหากจำเป็น

หากคุณยังพบปัญหา:

  • ตรวจสอบความถูกต้องตามหลักไวยากรณ์ XML ในไฟล์การกำหนดค่าของคุณอย่างละเอียด
  • มองหาคำพ้องในชื่อของผู้จัดการแคชและแบ็คกิ้งสโตร์ของคุณ
  • อ้างอิงเอกสาร ต้นฉบับ เพื่อให้แน่ใจว่าการกำหนดค่าที่จำเป็นทั้งหมดถูกตั้งค่า

สรุป

การแปลการกำหนดค่าจาก Enterprise Library 1.1 ไปยัง 2.0 อาจดูน่ากลัว แต่ด้วยขั้นตอนที่ชัดเจนเหล่านี้ คุณควรจะหลีกเลี่ยงหลุมพรางทั่วไปและแก้ไขข้อยกเว้นการอ้างอิง NULL ที่อาจเกิดขึ้นในแอปพลิเคชันของคุณได้ จำไว้ว่ากุญแจสู่การย้ายที่สำเร็จคือการตรวจสอบให้แน่ใจว่าไฟล์การกำหนดค่าของคุณถูกตั้งค่าอย่างถูกต้องและถูกอ้างอิงอย่างเหมาะสม

อย่าลังเลที่จะแบ่งปันคำแนะนำนี้กับนักพัฒนาคนอื่น ๆ ที่อาจเผชิญกับความท้าทายที่คล้ายกัน และหลีกเลี่ยงความปวดหัวจากข้อผิดพลาดการอ้างอิง NULL!