Ada beberapa cara untuk menangani apa yang Anda minta, dan beberapa aspek berbeda untuk pertanyaan Anda:
Tangani pembaruan kecil untuk promosi
Apa yang Anda benar-benar setelah di sini adalah sistem manajemen konten atau serupa yang memungkinkan Anda untuk mengedit konten dengan cepat (pikirkan Wordpress / Drupal atau dari sudut pandang .NET N2 CMS, Umbraco, Orchard, dll.), Namun ada ada beberapa hal yang bisa Anda coba jika Anda belum menempuh rute itu.
Karena ASP.NET hanya benar-benar memuat ulang jika Anda menyentuh jenis file tertentu (web.config (s), isi folder /bin/
dan /app_code/
sebagian besar) - dan memiliki batas yang dapat dikonfigurasi untuk "perubahan file lain" (pada dasarnya begitu Anda telah memodifikasi begitu banyak file di dalam situs Anda kumpulan aplikasi akan restart - NumRecompilesBeforeAppRestart
) Anda bisa melihat melakukan sesuatu di mana Anda memeriksa folder yang berbeda untuk beberapa .html
file statis (yaitu ) yang Anda tarik dan tampilkan sesuai kebutuhan, atau memanfaatkan LoadControl
metode yang mengambil jalur string untuk sebuah .ascx
kontrol pengguna dan dinamis beban itu - bagaimana Anda menentukan untuk acara adalah pertanyaan yang berbeda lebih cocok untuk StackOverflow - namun saya akan merekomendasikan solusi berdasarkan konvensi penamaan.
Anda juga dapat melihat menggunakan sesuatu seperti Managed Extensibility Framework (MEF - yang telah menjadi bagian penuh dari .NET framework sejak versi 4) yang memungkinkan Anda untuk menulis arsitektur berbasis plugin dan menentukan folder di luar /bin/
direktori Anda untuk memonitor .DLL baru - walaupun saya belum mencoba ini untuk melihat apakah itu akan menghindari masalah restart aplikasi, saya telah menggunakan ini untuk efek yang baik di lingkungan web untuk menambahkan fungsionalitas umum ke situs.
Jika itu tidak menarik, satu-satunya pilihan lain yang dapat saya pikirkan adalah menambahkan kontrol sebagai "code-in-front" seperti yang kami lakukan pada ASP klasik - yaitu dengan <script runat="server">
blok alih-alih kelas "kode-belakang" yang dikompilasi. yang berisi logika untuk menjalankan kontrol - ini akan menghapus kebutuhan untuk perubahan DLL, dengan mengorbankan beberapa kehilangan kinerja pertama kali saat kontrol dikompilasi dengan cepat - lagi Anda harus menyeimbangkan ini dengan NumRecompilesBeforeAppRestart
jika Anda Sedang melakukan banyak perubahan kecil.
Bagaimana cara bertahan sesi di restart aplikasi?
Ini mungkin masalah yang lebih mudah untuk dipecahkan dan melibatkan tiga langkah utama:
- Konfigurasikan MachineKey (IIS7, tetapi masih berlaku untuk 8) menjadi nilai yang konstan daripada
AutoGenerate
- ini berarti bahwa ketika AppPool melakukan daur ulang, ia akan menggunakan kunci yang sama, dan dengan demikian akan dapat mendekripsi cookie sesi, kondisi tampilan, dll. Dari sebelumnya daur ulang.
- Baik mengatur Server Negara atau mengkonfigurasi Database untuk menahan Sesi Negara .
- Beralih dari menggunakan
InProc
ke StateServer
atau SQLServer
dalam elemen SessionState di web.config Anda.
Dengan cara ini Anda akan memiliki sesi persisten yang selamat dari restart aplikasi. Namun, ini bukan "gratis" - semua yang Anda simpan di sesi sekarang harus serializable, dan Anda akan mendapatkan sedikit performa karena setiap beban halaman sekarang akan memerlukan perjalanan jaringan tambahan untuk mendapatkan, dan berpotensi merilis data sesi.
Namun, jika Anda berada dalam posisi di mana dibutuhkan "beberapa menit" untuk aplikasi untuk memulai kembali setelah penyebaran, Anda mungkin ingin mempertimbangkan untuk pindah ke lingkungan yang seimbang beban, atau setidaknya pengaturan Staging / Live hot-swappable (seperti yang disediakan oleh Azure / AWS / dll.) - dengan cara ini Anda dapat membuat server offline saat Anda memperbaruinya atau membuatnya siap dengan kode baru dan kemudian menukar itu - asalkan Anda telah mengambil langkah-langkah untuk mengatasi alamat bersama sesi (lihat di atas) ini akan berfungsi dengan baik tanpa dampak kepada pengguna Anda.