มีหลายวิธีในการจัดการสิ่งที่คุณขอและด้านต่าง ๆ สำหรับคำถามของคุณ:
จัดการอัปเดตเล็ก ๆ สำหรับโปรโมชั่น
สิ่งที่คุณต้องการหลังจากนี้คือระบบการจัดการเนื้อหาหรือคล้ายกันที่ช่วยให้คุณแก้ไขเนื้อหาได้ทันที (คิดว่า Wordpress / Drupal หรือจากมุมมอง. NET N2 CMS, Umbraco, Orchard, ฯลฯ ) อย่างไรก็ตามมี มีบางสิ่งที่คุณสามารถลองได้หากคุณยังไม่ได้ลงเส้นทางนั้น
เนื่องจาก ASP.NET โหลดซ้ำจริงๆถ้าคุณแตะไฟล์บางประเภท (web.config (s) เนื้อหาของ/bin/
และ/app_code/
โฟลเดอร์ส่วนใหญ่) - และมีข้อ จำกัด ที่กำหนดค่าได้สำหรับ "การเปลี่ยนแปลงไฟล์อื่น ๆ " (โดยทั่วไปเมื่อคุณแก้ไขดังนั้น หลาย ๆ ไฟล์ในเว็บไซต์ของคุณแอพพลิเคชั่นจะเริ่มต้นใหม่ - NumRecompilesBeforeAppRestart
) คุณสามารถดูสิ่งที่คุณตรวจสอบโฟลเดอร์ที่แตกต่างกันสำหรับ.html
ไฟล์แบบคงที่ (เช่น) บางไฟล์ที่คุณดึงและแสดงตามต้องการหรือใช้LoadControl
วิธีที่ใช้เส้นทางสตริง การ.ascx
ควบคุมผู้ใช้และโหลดแบบไดนามิก - วิธีที่คุณกำหนดว่าจะแสดงเป็นคำถามที่แตกต่างกันซึ่งเหมาะกับ StackOverflow มากขึ้น - แต่ฉันขอแนะนำวิธีแก้ปัญหาการตั้งชื่อตามแบบแผน
คุณสามารถดูการใช้บางอย่างเช่นManaged Extensibility Framework (MEF - ซึ่งเป็นส่วนหนึ่งของ. NET Framework ตั้งแต่รุ่น 4) ซึ่งช่วยให้คุณสามารถเขียนสถาปัตยกรรมแบบปลั๊กอินและระบุโฟลเดอร์นอก/bin/
ไดเรกทอรีของคุณเพื่อตรวจสอบ ใหม่. DLLs - แม้ว่าฉันจะไม่พยายามทำสิ่งนี้เพื่อดูว่ามันจะหลีกเลี่ยงปัญหาการรีสตาร์ทแอพหรือไม่ฉันได้ใช้สิ่งนี้เพื่อให้เกิดผลดีในสภาพแวดล้อมเว็บเพื่อเพิ่มฟังก์ชันการทำงานทั่วไปให้กับเว็บไซต์
ถ้านั่นไม่ดึงดูดความสนใจตัวเลือกอื่นที่ฉันคิดว่าน่าจะเพิ่มตัวควบคุมเป็น "โค้ดหน้า" เหมือนกับที่เราทำใน ASP คลาสสิก - นั่นคือ<script runat="server">
บล็อกแทนที่จะเป็นคลาส "โค้ด - หลัง" ที่คอมไพล์แล้ว ที่มีตรรกะในการทำงานการควบคุม - นี้จะเอาความต้องการสำหรับการเปลี่ยนแปลง DLL ที่ค่าใช้จ่ายของการสูญเสียประสิทธิภาพการทำงานครั้งแรกในขณะที่การควบคุมจะรวบรวมได้ทันที - อีกครั้งคุณจะต้องสมดุลนี้ด้วยNumRecompilesBeforeAppRestart
ถ้าคุณ กำลังทำการเปลี่ยนแปลงเล็กน้อยมากมาย
ฉันจะคงเซสชันในแอปรีสตาร์ทได้อย่างไร
นี่อาจเป็นปัญหาที่ง่ายกว่าในการแก้ไขและเกี่ยวข้องกับสามขั้นตอนสำคัญ:
- กำหนดค่า MachineKey (IIS7 แต่ยังคงเก็บไว้เป็น 8)เพื่อเป็นค่าคงที่มากกว่า
AutoGenerate
- ซึ่งหมายความว่าเมื่อ AppPool ทำการรีไซเคิลจะใช้รหัสเดียวกันและจะสามารถถอดรหัสคุกกี้เซสชั่น viewstate และอื่น ๆ จากก่อนหน้านี้ รีไซเคิล
- ทั้งการติดตั้งเซิร์ฟเวอร์สถานะหรือการกำหนดค่าฐานข้อมูลที่จะถือสถานะเซสชัน
- สลับจากการใช้
InProc
เป็นStateServer
หรือSQLServer
ในองค์ประกอบ SessionState ใน web.config ของคุณ
ด้วยวิธีนี้คุณจะมีเซสชันถาวรที่เริ่มการทำงานแอปใหม่ อย่างไรก็ตามสิ่งเหล่านี้ไม่ใช่ "ฟรี" - ทุกสิ่งที่คุณเก็บไว้ในเซสชันต้องเป็นแบบอนุกรมและคุณจะได้รับประสิทธิภาพการทำงานเล็กน้อยเนื่องจากการโหลดแต่ละหน้าจะต้องใช้การเดินทางผ่านเครือข่ายเพิ่มเติมเพื่อรับและอาจปล่อยข้อมูลเซสชัน
อย่างไรก็ตามหากคุณอยู่ในตำแหน่งที่ต้องใช้เวลา "หลายนาที" เพื่อให้แอปพลิเคชันเริ่มต้นใหม่หลังจากการปรับใช้คุณอาจต้องการพิจารณาย้ายไปสู่สภาพแวดล้อมที่สมดุลโหลดหรืออย่างน้อยการตั้งค่า Staging / Live แบบถอดเปลี่ยนได้ (เช่นที่จัดทำโดย Azure / AWS / ฯลฯ ) - วิธีนี้คุณสามารถทำให้เซิร์ฟเวอร์ออฟไลน์ในขณะที่คุณอัปเดตหรือทำให้พร้อมกับรหัสใหม่แล้วสลับใน - หากคุณได้ทำตามขั้นตอนเพื่อระบุที่อยู่ที่ใช้ร่วมกัน เซสชัน (ดูด้านบน) สิ่งนี้จะใช้ได้ดีโดยไม่มีผลกระทบกับผู้ใช้