Toplu iş dosyalarında bir dizi başlangıç görevim var. Özellikle IIS'yi yapılandırmak için IIS'nin appcmd.exe
numaralı telefonunu arıyorum. Azure'daki başlangıç görevleri, bir nedenle rolün yeniden başlatılması durumunda, idempotent (yani, aynı sonuçlarla tekrar tekrar çalıştırılabilen) durumundadır. Ne yazık ki çoğu IIS konfigürasyon komutlarım ikinci kez başarısız olur, örneğin ilk kez bir konfigürasyon düğümünü sildiği için sonraki çalışmalarda mevcut değildir.Başlangıç görevleri nasıl yapılır?
Sorum şu, bu başlangıç görevlerini nasıl idrara çıkarıyorum? Appcmd.exe hataları atmak için bir yol var mı? Kabuğun hataları yakalamasını sağlamanın bir yolu var mı? Azure çerçevesinin hataları görmezden gelmesinin bir yolu var mı?
İşte başlangıç görevlerimin bir örneği. Bu, bir komut dosyasında configiis.cmd
bulunur.
@REM Enable IIS compression for application/json MIME type
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost
@REM Set IIS to automatically start AppPools
%windir%\system32\inetsrv\appcmd.exe set config -section:applicationPools -applicationPoolDefaults.startMode:AlwaysRunning /commit:apphost
@REM Set IIS to not shut down idle AppPools
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 /commit:apphost
@REM But don't automatically start the AppPools that we don't use, and do shut them down when idle
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='Classic .NET AppPool'].startMode:OnDemand" "/[name='Classic .NET AppPool'].autoStart:False" "/[name='Classic .NET AppPool'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0'].startMode:OnDemand" "/[name='ASP.NET v4.0'].autoStart:False" "/[name='ASP.NET v4.0'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0 Classic'].startMode:OnDemand" "/[name='ASP.NET v4.0 Classic'].autoStart:False" "/[name='ASP.NET v4.0 Classic'].processModel.idleTimeout:00:01:00" /commit:apphost
@REM remove IIS response headers
%windir%\system32\inetsrv\appcmd.exe set config /section:httpProtocol /-customHeaders.[name='X-Powered-By']
Sen yapılandırma ayarı silmek için denemeden önce mevcut olup olmadığını görmek için kontrol etmesi gerekir
Kullanılmayan AppPools'u otomatik olarak başlatmayı durdurması beklenen satırların çalışmadığından emin olun. 'Klasik .NET AppPool' kullanmak yerine, Clr2ClassicAppPool vb. –
Aslında bu isimler iyi çalışıyor, ama biraz farklı alıntılanması gerekiyordu. Yukarıdaki kodu, birilerinin daha sonra görmesi durumunda güncelledim. –