Yüzlerce ayrı web uygulaması barındıran bir IIS sunucumuz var ve bu uygulamaları barındıran fiziksel veritabanı sunucusu kısa bir süre bakım için çevrimdışı olacak (15 dakikadan az sürmesini bekliyoruz).
Bu süre zarfında, gelen tüm trafiği herhangi bir web sitesi için "şu anda bakım aşamasındayız" sayfasına yönlendirmek istiyoruz.
Bunu her web uygulamasına gidip kullanıcıyı bu uygulamadaki tüm istekler için başka bir sayfaya gönderen bir IIS yeniden yazma kuralı oluşturarak yapabileceğimin farkındayım. Ancak, bunu yapmak, veritabanı bakımını yapmaktan daha uzun sürecektir!
Hiçbiri işe yaramayan üç şey denedim:
Global IIS Yeniden Yazma Kuralı
Tüm sitelere bir kural uygulamak için basit bir yol arıyordum , tek bir swoop düştü - ve sonra eşit derecede ağrısız bir adımda "kuralı" geri almak mümkün. Şimdiye kadar hiçbir girişimim olmadı. Bu yeniden yazma kuralını W: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config adresindeki genel web.config dosyasına yerleştirmeyi denedim:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="redirect all requests" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Redirect" url="http://www.somedomain.com/maintenance" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Bu işe yaramadı. IIS'de .NET 4.0 64 bit çalıştırıyoruz.
App_Offline.htm "özel dosya"
Gördüğüm diğer bir öneri app_offline.htm "özel" dosyası , ancak bu sorunu, aslında bakım yapmaktan çok, tüm uygulamalarımızın uygulama köküne dağıtmanın daha uzun sürdüğü sorunu yaşıyoruz.
IIS'de "Çevrimdışıyız" Sitesi
Tüm sitelerimiz IIS'de tek bir IP ile kurulur. Bu, SNA'sız bile bizim için geçerlidir, çünkü tüm uygulamalarımız tek bir SSL sertifikası paylaşır (bu bir UCC'dir). Aklıma bir şey olduğunu belki kurulum olabilir Kullandığımız IP'ye tüm trafiği eşleşti ve bu IIS bir site yoktu bir ana başlık değerini belirtin. Umut, daha yüksek bir "öncelik" verebilmemdi ve başladığında, diğer sitelerin herhangi biriyle eşleşme şansı bulamadan tüm IP trafiğini eşleştirecekti. Bu siteyi, istek URL'sine bakılmaksızın tüm istekler için aynı sayfayı sunacak şekilde ayarlayabilirim.
Bakım yaparken bu siteyi başlatın ve bittiğinde durdurun.
Ancak, IIS'nin daha az spesifik olmadan önce bir HTTP isteğini daha belirli bir siteyle eşleştirdiği anlaşıldığında, bu çalışmayı da başaramadım. Bu nedenle, bu "kullanıcılara çevrimdışı olduğumuzu söyle" sitesi için bir ana bilgisayar üstbilgisi değerini atlayarak, isteğin başka bir siteyle eşleşen bir ana bilgisayar üstbilgisi değeri olmadığı sürece eşleşme olmadı. Bu da bizi her bir web uygulamasına manuel olarak gitme ve çevrimdışı duruma getirmek için bir işlem gerçekleştirme ve bakım ile işimiz bittiğinde tekrar çevrimiçi duruma getirme sorununa geri döndürüyor
Bunu başarmanın basit bir yolu var mı? Bu sorunla ilk karşılaşan biz değiliz.
-Josh