Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda, Internet Information Services (IIS) Web Dağıtım Aracı (Web Dağıtımı) kullanılarak otomatik dağıtım süresi boyunca bir web uygulamasının nasıl çevrimdışına alındığı açıklanmaktadır. Web uygulamasına göz atan kullanıcılar, dağıtım tamamlanana kadar birApp_offline.htm dosyasına yönlendirilir.
Bu konu, Fabrikam, Inc adlı kurgusal bir şirketin kurumsal dağıtım gereksinimlerini temel alan bir dizi öğreticinin bir parçasını oluşturur. Bu öğretici serisinde, ASP.NET MVC 3 uygulaması, Windows Communication Foundation (WCF) hizmeti ve veritabanı projesi dahil olmak üzere gerçekçi bir karmaşıklık düzeyine sahip bir web uygulamasını temsil etmek için örnek bir çözüm (Contact Manager çözümü) kullanılır.
Bu öğreticilerin temelindeki dağıtım yöntemi, derleme işleminin iki proje dosyası tarafından denetlendiği Proje Dosyasını Anlama bölümünde açıklanan bölünmüş proje dosyası yaklaşımını temel alır: biri her hedef ortama uygulanan derleme yönergelerini, diğeri de ortama özgü derleme ve dağıtım ayarlarını içerir. Derleme zamanında, ortama özgü proje dosyası, tam bir derleme yönergeleri kümesi oluşturmak için ortama bağımsız proje dosyasıyla birleştirilir.
Göreve Genel Bakış
Birçok senaryoda, veritabanları veya web hizmetleri gibi ilgili bileşenlerde değişiklik yaparken bir web uygulamasını çevrimdışı duruma getirmek istersiniz. Genellikle IIS ve ASP.NET'da bunu, IIS web sitesinin veya web uygulamasının kök klasörüne App_offline.htm adlı bir dosya yerleştirerek gerçekleştirirsiniz. App_offline.htm dosyası standart bir HTML dosyasıdır ve genellikle kullanıcıya sitenin bakım nedeniyle geçici olarak kullanılamadığını belirten basit bir ileti içerir. App_offline.htm dosyası web sitesinin kök klasöründe mevcut olsa da, IIS tüm istekleri otomatik olarak dosyaya yeniden yönlendirir. Güncelleştirmeleri yapmayı bitirdiğinizde ,App_offline.htm dosyasını kaldırırsınız ve web sitesi isteklerin sunulmasını her zamanki gibi sürdürür.
Hedef ortama otomatik veya tek adımlı dağıtımlar gerçekleştirmek için Web Dağıtımı'nı kullandığınızda, App_offline.htm dosyasını ekleme ve kaldırma işlemlerini dağıtım sürecinize dahil etmek isteyebilirsiniz. Bunu yapmak için şu üst düzey görevleri tamamlamanız gerekir:
- Dağıtım işlemini denetlemek için kullandığınız Microsoft Build Engine (MSBuild) proje dosyasında, herhangi bir dağıtım görevi başlamadan önce hedef sunucuya birApp_offline.htm dosyası kopyalayan bir MSBuild hedefi oluşturun.
- Tüm dağıtım görevleri tamamlandığında hedef sunucudan App_offline.htm dosyasını kaldıran başka bir MSBuild hedefi ekleyin.
- Web uygulaması projesinde, Web Dağıtımı çağrıldığında dağıtım paketine birApp_offline.htm dosyasının eklenmesini sağlayan bir .wpp.targets dosyası oluşturun.
Bu konu başlığında, bu yordamların nasıl gerçekleştirileceği gösterilir. Bu konudaki görevler ve izlenecek yollar, en az bir web uygulaması projesi içeren bir çözüm oluşturduğunuzu ve Kurumsal'da Web Dağıtımı'nda açıklandığı gibi dağıtım işlemini denetlemek için özel bir proje dosyası kullandığınızı varsayar. Alternatif olarak, konudaki örnekleri izlemek için Contact Manager örnek çözümünü kullanabilirsiniz.
Web Uygulaması Projesine App_Offline Dosyası Ekleme
Tamamlamanız gereken ilk görev, web uygulaması projenize bir App_offline dosyası eklemektir:
- Dosyanın geliştirme işlemine müdahale etmesini önlemek için (uygulamanızın kalıcı olarak çevrimdışı olmasını istemezsiniz), dosyaya App_offline.htmdışında bir ad vermelisiniz. Örneğin, dosyayı App_offline-template.htmadlandırabilirsiniz.
- Dosyanın olduğu gibi dağıtılmasını önlemek için derleme eylemini Yok olarak ayarlamanız gerekir.
Web uygulaması projesine App_offline dosyası eklemek için
Çözümünüzü Visual Studio 2010'da açın.
Çözüm Gezgini penceresinde web uygulaması projenize sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Öğe'ye tıklayın.
Yeni Öğe Ekle iletişim kutusunda HTML Sayfası'nı seçin.
Ad kutusuna App_offline-template.htmyazın ve Ekle'ye tıklayın.
Kullanıcılara uygulamanın kullanılamadığını bildirmek için bazı basit HTML'ler ekleyin ve dosyayı kaydedin. Herhangi bir sunucu tarafı etiketi (örneğin, "asp:" ön ekli etiketler) eklemeyin.
Çözüm Gezgini penceresinde yeni dosyaya sağ tıklayın ve ardından Özellikler'e tıklayın.
Özellikler penceresinde, Derleme Eylemi satırında Yok'u seçin.
App_Offline Dosyasını Dağıtma ve Silme
Sonraki adım, dağıtım mantığınızı değiştirerek dosyayı dağıtım işleminin başlangıcında hedef sunucuya kopyalayıp sonunda kaldırmaktır.
Not
Sonraki yordamda, Proje Dosyasını Anlama bölümünde açıklandığı gibi dağıtım işleminizi denetlemek için özel bir MSBuild proje dosyası kullandığınız varsayılır. Doğrudan Visual Studio'dan dağıtıyorsanız farklı bir yaklaşım kullanmanız gerekir. Sayed Ibrahim Hashimi, Yayımlama Sırasında Web Uygulamanızı Çevrimdışına Alma başlığında bu tür bir yaklaşımı açıklar.
Bir App_offline dosyasını hedef IIS web sitesine dağıtmak için Web Deploy contentPath sağlayıcısını kullanarak MSDeploy.exe çağırmanız gerekir. contentPath sağlayıcısı hem fiziksel dizin yollarını hem de IIS web sitesini veya uygulama yollarını destekler; bu da visual studio proje klasörü ile IIS web uygulaması arasında bir dosyayı eşitlemek için ideal seçim olmasını sağlar. Dosyayı dağıtmak için MSDeploy komutunuz şuna benzemelidir:
msdeploy.exe –verb:sync
-source:contentPath="[Project folder]\App_offline.template.htm"
-dest:contentPath="[IIS application path]/App_offline.htm",
computerName="[Destination web server]"
Dağıtım işleminin sonunda dosyayı hedef siteden kaldırmak için MSDeploy komutunuz şuna benzer olmalıdır:
msdeploy.exe –verb:delete
-dest:contentPath="[IIS application path]/App_offline.htm",
computerName="[Destination web server]"
Bu komutları derleme ve dağıtım işleminin bir parçası olarak otomatikleştirmek için bunları özel MSBuild proje dosyanızla tümleştirmeniz gerekir. Sonraki yordamda bunun nasıl gerçekleştirileceği açıklanmaktadır.
App_offline dosyasını dağıtmak ve silmek için
Visual Studio 2010'da, dağıtım işleminizi denetleen MSBuild proje dosyasını açın. Contact Manager örnek çözümünde bu Publish.proj dosyasıdır.
Kök Project öğesinde, App_offline dağıtımının değişkenlerini depolamak için yeni bir PropertyGroup öğesi oluşturun:
<PropertyGroup> <AppOfflineTemplateFilename Condition=" '$(AppOfflineTemplateFilename)'=='' "> app_offline-template.htm </AppOfflineTemplateFilename> <AppOfflineSourcePath Condition=" '$(AppOfflineSourcePath)'==''"> $(SourceRoot)ContactManager.Mvc\$(AppOfflineTemplateFilename) </AppOfflineSourcePath> </PropertyGroup>SourceRoot özelliği Publish.proj dosyasının başka bir yerinde tanımlanır. Kaynak içeriğin geçerli yola göre kök klasörünün konumunu gösterir; başka bir deyişle Publish.proj dosyasının konumuna göre.
contentPath sağlayıcısı göreli dosya yollarını kabul etmediğinden, dağıtmadan önce kaynak dosyanızın mutlak yolunu almanız gerekir. Bunu yapmak için ConvertToAbsolutePath görevini kullanabilirsiniz.
GetAppOfflineAbsolutePath adlı yeni bir Target öğesi ekleyin. Bu hedefte ConvertToAbsolutePath görevini kullanarak proje klasörünüzdeki App_offline-şablon dosyasının mutlak yolunu alın.
<Target Name="GetAppOfflineAbsolutePath" BeforeTargets="DeployAppOffline"> <ConvertToAbsolutePath Paths="$(AppOfflineSourcePath)"> <Output TaskParameter="AbsolutePaths" PropertyName="AppOfflineAbsoluteSourcePath" /> </ConvertToAbsolutePath> </Target>Bu hedef, proje klasörünüzdeki App_offline-şablon dosyasının göreli yolunu alır ve bunu yeni bir özelliğe mutlak dosya yolu olarak kaydeder. BeforeTargets özniteliği, bir sonraki adımda oluşturacağınız DeployAppOffline hedefinde bu hedefin yürütülmesini istediğinizi belirtir.
DeployAppOffline adlı yeni bir hedef ekleyin. Bu hedefte, App_offline dosyanızı hedef web sunucusuna dağıtan MSDeploy.exe komutunu çağırın.
<Target Name="DeployAppOffline" Condition=" '$(EnableAppOffline'!='false' "> <PropertyGroup> <_Cmd>"$(MSDeployPath)\msdeploy.exe" -verb:sync -source:contentPath="$(AppOfflineAbsoluteSourcePath)" -dest:contentPath="$(ContactManagerIisPath)/App_offline.htm", computerName="$(MSDeployComputerName)" </_Cmd> </PropertyGroup> <Exec Command="$(_Cmd)"/> </Target>Bu örnekte ContactManagerIisPath özelliği proje dosyasının başka bir yerinde tanımlanmıştır. Bu yalnızca [IIS Web Sitesi Adı]/[Uygulama Adı] biçiminde bir IIS uygulama yoludur. Hedefe bir koşul eklemek, kullanıcıların bir özellik değerini değiştirerek veya komut satırı parametresi sağlayarak App_offline dağıtımını açmasına veya kapatmasına olanak tanır.
DeleteAppOffline adlı yeni bir hedef ekleyin. Bu hedefte, hedef web sunucusundan App_offline dosyanızı kaldıran MSDeploy.exe komutunu çağırın.
<Target Name="DeleteAppOffline" Condition=" '$(EnableAppOffline'!='false' "> <PropertyGroup> <_Cmd>"$(MSDeployPath)\msdeploy.exe" -verb:delete -dest:contentPath="$(ContactManagerIisPath)/App_offline.htm", computerName="$(MSDeployComputerName)" </_Cmd> </PropertyGroup> <Exec Command="$(_Cmd)"/> </Target>Son görev, proje dosyanızın yürütülmesi sırasında bu yeni hedefleri uygun noktalarda çağırmaktır. Bunu çeşitli yollarla yapabilirsiniz. Örneğin, Publish.proj dosyasında, FullPublishDependsOn özelliği, FullPublish varsayılan hedefi çağrıldığında sırayla yürütülmesi gereken hedeflerin listesini belirtir.
MSBuild proje dosyanızı, yayımlama işleminin uygun noktalarında DeployAppOffline ve DeleteAppOffline hedeflerini çağıracak şekilde değiştirin.
<PropertyGroup> <FullPublishDependsOn> Clean; BuildProjects; DeployAppOffline; GatherPackagesForPublishing; PublishDbPackages; DeployTestDBPermissions; PublishWebPackages; DeleteAppOffline; </FullPublishDependsOn> </PropertyGroup> <Target Name="FullPublish" DependsOnTargets="$(FullPublishDependsOn)" />
Özel MSBuild proje dosyanızı çalıştırdığınızda, App_offline dosyası başarılı bir derlemeden hemen sonra sunucuya dağıtılır. Ardından tüm dağıtım görevleri tamamlandıktan sonra sunucudan silinir.
Dağıtım Paketlerine App_Offline Dosyası Ekleme
Dağıtımınızı nasıl yapılandırdığınıza bağlı olarak, hedefe bir web paketi dağıttığınızda hedef IIS web uygulamasındaki tüm içerik ( App_offline.htm dosyası gibi) otomatik olarak silinebilir. App_offline.htm dosyasının dağıtım süresi boyunca yerinde kalmasını sağlamak için, dosyayı dağıtım işleminin başlangıcında doğrudan dağıtmanın yanı sıra dosyayı web dağıtım paketinin içine eklemeniz gerekir.
- Bu konudaki önceki görevleri izlediyseniz, App_offline.htm dosyasını web uygulaması projenize farklı bir dosya adı altında eklemiş olursunuz ( App_offline-template.htmkullandık) ve derleme eylemini Yok olarak ayarlamış olursunuz. Bu değişiklikler, dosyanın geliştirme ve hata ayıklamayı engellemesini önlemek için gereklidir. Sonuç olarak, App_offline.htm dosyasının web dağıtım paketine dahil olduğundan emin olmak için paketleme işlemini özelleştirmeniz gerekir.
Web Yayımlama İşlem Hattı (WPP), web dağıtım paketine eklenmesi gereken dosyaların listesini oluşturmak için FilesForPackagingFromProject adlı bir öğe listesi kullanır. Bu listeye kendi öğelerinizi ekleyerek web paketlerinizin içeriğini özelleştirebilirsiniz. Bunu yapmak için şu üst düzey adımları tamamlamanız gerekir:
Proje dosyanızla aynı klasörde [proje adı].wpp.targets adlı özel bir proje dosyası oluşturun.
Not
.wpp.targets dosyasının, derleme ve dağıtım işlemini denetlemek için kullandığınız özel proje dosyalarıyla aynı klasör yerine web uygulaması proje dosyanızla (örneğin, ContactManager.Mvc.csproj) aynı klasöre gitmesi gerekir.
.wpp.targets dosyasında CopyAllFilesToSingleFolderForPackage hedeften önce yürütülen yeni bir MSBuild hedefi oluşturun. Bu, pakete eklenecek öğelerin listesini oluşturan WPP hedefidir.
Yeni hedefte bir ItemGroup öğesi oluşturun.
ItemGroup öğesinde bir FilesForPackagingFromProject öğesi ekleyin ve App_offline.htm dosyasını belirtin.
.wpp.targets dosyası şuna benzemelidir:
<Project ToolsVersion="4.0"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AddAppOfflineToPackage"
BeforeTargets="CopyAllFilesToSingleFolderForPackage">
<ItemGroup>
<FilesForPackagingFromProject Include="App_offline-template.htm">
<DestinationRelativePath>App_offline.htm</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
</Project>
Bu örnekte dikkate alınacak önemli noktalar şunlardır:
- BeforeTargets özniteliği, CopyAllFilesToSingleFolderForPackage hedeften hemen önce yürütülmesi gerektiğini belirterek bu hedefi WPP'ye ekler.
- FilesForPackagingFromProject öğesi, destinationRelativePath meta veri değerini kullanarak dosyayı listeye eklendikçe App_offline-template.htm'den App_offline.htm olarak yeniden adlandırır.
Sonraki yordamda bu .wpp.targets dosyasının bir web uygulaması projesine nasıl ekleneceği gösterilmektedir.
Web dağıtım paketine .wpp.targets dosyası eklemek için
Çözümünüzü Visual Studio 2010'da açın.
Çözüm Gezgini penceresinde web uygulaması proje düğümünüze (örneğin, ContactManager.Mvc) sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Öğe'ye tıklayın.
Yeni Öğe Ekle iletişim kutusunda XML Dosyası şablonunu seçin.
Ad kutusuna [proje adı].wpp.targets (örneğin, ContactManager.Mvc.wpp.targets) yazın ve Ekle'ye tıklayın.
Not
Projenin kök düğümüne yeni bir öğe eklerseniz, dosya proje dosyasıyla aynı klasörde oluşturulur. Klasörü Windows Gezgini'nde açarak bunu doğrulayabilirsiniz.
Dosyasına, daha önce açıklanan MSBuild işaretlemesini ekleyin.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="AddAppOfflineToPackage" BeforeTargets="CopyAllFilesToSingleFolderForPackage"> <ItemGroup> <FilesForPackagingFromProject Include="App_offline-template.htm"> <DestinationRelativePath>App_offline.htm</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target> </Project>[proje adı].wpp.targets dosyasını kaydedin ve kapatın.
Web uygulaması projenizi bir sonraki derlemenizde ve paketlediğinizde, WPP .wpp.targets dosyasını otomatik olarak algılar. App_offline-template.htm dosyası, sonuçta elde edilen web dağıtım paketine App_offline.htmolarak eklenir.
Not
Dağıtımınız başarısız olursa App_offline.htm dosyası yerinde kalır ve uygulamanız çevrimdışı kalır. Bu genellikle istenen davranıştır. Uygulamanızı yeniden çevrimiçi yapmak için App_offline.htm dosyasını web sunucunuzdan silebilirsiniz. Alternatif olarak, hataları düzeltip başarılı bir dağıtım çalıştırırsanız App_offline.htm dosyası kaldırılır.
Sonuç
Bu konu başlığında, dağıtım işleminin başlangıcında hedef sunucuda bir App_offline.htm dosyası yayımlayıp sonunda kaldırarak bir web uygulamasının dağıtım süresince nasıl çevrimdışına alındığı açıklanmıştır. Ayrıca bir web dağıtım paketine App_offline.htm dosyasının nasıl dahil olduğu da ele alınmıştır.
Daha Fazla Bilgi
Paketleme ve dağıtım işlemi hakkında daha fazla bilgi için bkz. Web Uygulaması Projeleri Oluşturma ve Paketleme, Web Paketi Dağıtımı için Parametreleri Yapılandırma ve Web Paketlerini Dağıtma.
Web uygulamalarınızı bu öğreticilerde açıklanan özel MSBuild proje dosyası yaklaşımını kullanmak yerine doğrudan Visual Studio'dan yayımlarsanız, yayımlama işlemi sırasında uygulamanızı çevrimdışına almak için biraz farklı bir yaklaşım kullanmanız gerekir.