İstediğinizi ele almanın birkaç yolu ve sorunuzun birkaç farklı yönü vardır:
Promosyonlar için küçük güncellemeler yapın
Burada peşinde olduğunuz şey, içeriği anında düzenlemenize izin veren bir içerik yönetim sistemi veya benzeri bir şeydir (Wordpress / Drupal'ı veya .NET bakış açısından N2 CMS, Umbraco, Orchard vb.) o rotadan gitmediyseniz deneyebileceğiniz şeyler.
ASP.NET yalnızca belirli dosya türlerine (web.config (s), çoğunlukla /bin/
ve /app_code/
klasörlerin içeriğine) dokunursanız gerçekten yeniden yüklendiğinden ve "diğer dosya değişiklikleri" için yapılandırılabilir bir limite sahip olduğundan (temelde sitenizdeki birçok dosya uygulama havuzu yeniden başlatılır - NumRecompilesBeforeAppRestart
) .html
, çektiğiniz ve gerektiğinde görüntülediğiniz bazı statik (yani ) dosyalar için farklı bir klasörü kontrol ettiğiniz bir şeyi yapmaya bakabilir veya LoadControl
bir dize yolu alan yöntemi kullanabilirsiniz . bir .ascx
kullanıcı denetimi ve dinamik olarak yükler - nasıl gösterileceğini StackOverflow için daha farklı bir soru olduğunu nasıl belirlediğiniz - ancak bir adlandırma kural tabanlı çözüm öneriyoruz.
Eklenti tabanlı bir mimari yazmanıza ve izleyeceğiniz dizinin dışında bir klasör belirtmenize olanak tanıyan Yönetilen Genişletilebilirlik Çerçevesi (sürüm 4'ten beri .NET çerçevesinin tam bir parçası olan MEF) gibi bir şey de kullanabilirsiniz /bin/
. yeni .DLL'ler - Uygulamanın yeniden başlatma sorununu önleyip önleyemeyeceğini görmek için denememe rağmen, bir siteye ortak işlevsellik eklemek için bunu bir web ortamında iyi etki için kullandım.
Bu itiraz etmiyorsa, düşünebildiğim diğer tek seçenek, denetimleri klasik ASP'de yaptığımız gibi "ön kod" olarak eklemek olacaktır - yani <script runat="server">
derlenmiş bir "arkada kod" sınıfı yerine bir blokla Çalıştırmak için mantığı içeren - bu, kontrol anında derlendiğinden ilk kez performans kaybı pahasına bir DLL değişikliği ihtiyacını ortadan kaldıracaktır - yine bunu NumRecompilesBeforeAppRestart
eğer birçok küçük değişiklik yapıyorsunuz.
Uygulama yeniden başlatmalarında oturumları nasıl sürdürebilirim?
Bu muhtemelen çözülmesi daha kolay bir sorundur ve üç temel adımı içerir:
- MachineKey'i (IIS7, ancak 8 için tutar) sabit bir değer olacak şekilde yapılandırın
AutoGenerate
- bu, AppPool geri dönüştürüldüğünde aynı anahtarı kullanacağı ve böylece oturum çerezlerinin, görünüm durumunun vb. geri dönüşüm.
- Ya kurulum Devlet Sunucu veya oturum durumu tutmak için bir veritabanı yapılandırmak .
- Kullanmaktan Anahtarı
InProc
için StateServer
veya SQLServer
web.config SessionState elemanda.
Bu şekilde, uygulamanın yeniden başlatılmasını sağlayan kalıcı oturumlara sahip olursunuz. Bununla birlikte, bunlar "ücretsiz" değildir - oturumda sakladığınız her şey artık serileştirilebilir olmalıdır ve her sayfa yükünün artık ek ağ gezileri alması ve oturum verilerini serbest bırakması gerekeceğinden hafif bir performans artışı elde edersiniz.
Ancak, uygulamanın dağıtımdan sonra yeniden başlatılması "birkaç dakika" süren bir konumdaysanız, yük dengeli bir ortama veya en azından çalışırken değiştirilebilen bir Hazırlama / Canlı kurulumuna geçmeyi düşünebilirsiniz. (Azure / AWS / vb. tarafından sağlananlar gibi) - bu şekilde bir sunucuyu güncellerken çevrimdışı duruma getirebilir veya yeni kodla hazırlayıp ardından değiştirebilirsiniz - paylaşılan adresleme adımlarını atmış olmanız şartıyla oturumları (yukarıya bakın) bu, kullanıcılarınız üzerinde hiçbir etkisi olmadan iyi çalışır.