हमें एक IIS सर्वर मिला है जो सैकड़ों अलग-अलग वेब एप्लिकेशन होस्ट करता है, और इन ऐप्स को होस्ट करने वाला भौतिक डेटाबेस सर्वर संक्षिप्त अवधि के लिए रखरखाव के लिए ऑफ़लाइन लिया जा रहा है (हम इसे 15 मिनट से कम समय लेने की उम्मीद करते हैं)।
उस अवधि के दौरान, हम किसी भी वेबसाइट के लिए "अभी हम रखरखाव कर रहे हैं" पृष्ठ पर आने वाले सभी ट्रैफ़िक को पुनर्निर्देशित करना चाहते हैं।
मुझे लगता है कि मैं ऐसा हर वेब ऐप पर जाकर कर सकता हूं, और एक IIS रीराइट नियम स्थापित कर सकता हूं जो उपयोगकर्ता को उस ऐप के सभी अनुरोधों के लिए दूसरे पेज पर भेजता है। लेकिन, हमें डेटाबेस रखरखाव करने के लिए इसे करने में अधिक समय लगेगा!
मैंने तीन चीजों की कोशिश की है, जिनमें से कोई भी काम नहीं किया है:
वैश्विक IIS सुधार नियम
मैं सभी साइटों के लिए एक नियम लागू करने के लिए एक सरल तरीका खोज रहा हूं , एक झपट्टा में गिर गया - और फिर समान रूप से दर्द रहित चरण में उस नियम को "पूर्ववत" करने में सक्षम हो। अब तक, मेरे किसी भी प्रयास ने काम नहीं किया है। मैंने अपने वैश्विक web.config में W: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ web.config पर इस पुनर्लेखन नियम को डालने का प्रयास किया:
<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>
यह काम नहीं किया। हम IIS में .NET 4.0 64 बिट चला रहे हैं, लेकिन "बस के मामले में" मैंने 32 बिट और 2.0 वैश्विक web.config फ़ाइलों को एक ही चीज़ में रखा है, और अभी भी कोई बदलाव नहीं हुआ है।
App_Offline.htm "विशेष फ़ाइल"
एक अन्य सुझाव जो मैंने देखा है वह app_offline.htm "विशेष" फ़ाइल है , लेकिन हम इसे उसी मुद्दे को वापस ले रहे हैं जिससे इस फ़ाइल को हमारे सभी ऐप्स के ऐप रूट पर तैनात करने में अधिक समय लगे, क्योंकि यह वास्तव में रखरखाव करेगा।
IIS में "हम ऑफ़लाइन हैं" साइट
हमारी सभी साइटें एक ही आईपी के साथ IIS में सेटअप हैं। यह एसएनए के बिना भी हमारे लिए काम करता है क्योंकि हमारे सभी ऐप एक ही एसएसएल प्रमाणपत्र (यह एक यूसीसी) है। एक बात जो मेरे साथ हुई, वह यह थी कि शायद मैं IIS में एक साइट को सेट कर सकता हूं जो हमारे द्वारा उपयोग किए जा रहे आईपी पर सभी ट्रैफ़िक से मेल खाती है, और एक होस्ट हेडर मान निर्दिष्ट नहीं किया है । उम्मीद यह थी कि मैं इसे एक उच्च "मिसाल" दे सकता हूं और यह कि, जब यह शुरू हुआ, उस आईपी से सभी ट्रैफ़िक का मिलान करेगा, इससे पहले कि किसी भी अन्य साइट को मिलान करने का मौका मिले। मैं अनुरोध URL की परवाह किए बिना सभी अनुरोधों के लिए उसी साइट को सेट कर सकता हूं।
रखरखाव के दौर से गुजरने पर उस साइट को शुरू करें और समाप्त होने पर उसे रोक दें।
लेकिन, यह काम करने में मैं सक्षम नहीं था, क्योंकि IIS कम विशिष्ट से पहले अधिक विशिष्ट साइट पर एक HTTP अनुरोध से मेल खाता लगता है। इसलिए, इस "यह बताएं कि हम ऑफ़लाइन हैं" साइट के लिए होस्ट-हेडर मान को छोड़ कर, यह तब तक मेल नहीं खाता, जब तक कि अनुरोध में होस्ट-हेडर मान नहीं होता जो किसी अन्य साइट से मेल खाता हो। जो हमें प्रत्येक वेब ऐप पर मैन्युअल रूप से जाने और उसे ऑफ़लाइन लेने के लिए एक क्रिया करने की एक ही समस्या पर वापस रखता है और जब हम रखरखाव के साथ करते हैं तो इसे ऑनलाइन वापस करते हैं।
क्या इसे पूरा करने का एक सरल तरीका है? ऐसा लगता है कि निश्चित रूप से हम इस मुद्दे का सामना करने वाले पहले नहीं हैं।
-जोश