Bagikan melalui


Membuat Aplikasi Web Offline dengan Web Deploy

oleh Jason Lee

Topik ini menjelaskan cara membuat aplikasi web offline selama durasi penyebaran otomatis menggunakan Alat Penyebaran Web (Web Deploy) Internet Information Services (IIS). Pengguna yang menelusuri ke aplikasi web dialihkan ke file App_offline.htm hingga penyebaran selesai.

Topik ini merupakan bagian dari serangkaian tutorial berdasarkan persyaratan penyebaran perusahaan dari perusahaan fiktif bernama Fabrikam, Inc. Seri tutorial ini menggunakan solusi sampel— solusi Contact Manager—untuk mewakili aplikasi web dengan tingkat kompleksitas yang realistis, termasuk aplikasi ASP.NET MVC 3, layanan Windows Communication Foundation (WCF), dan proyek database.

Metode penyebaran di jantung tutorial ini didasarkan pada pendekatan file proyek terpisah yang dijelaskan dalam Memahami File Proyek, di mana proses build dikendalikan oleh dua file proyek—satu berisi instruksi build yang berlaku untuk setiap lingkungan tujuan, dan satu berisi pengaturan build dan penyebaran khusus lingkungan. Pada waktu build, file proyek khusus lingkungan digabungkan ke dalam file proyek agnostik lingkungan untuk membentuk serangkaian instruksi build lengkap.

Gambaran Umum Tugas

Dalam banyak skenario, Anda mungkin ingin membuat aplikasi web offline saat membuat perubahan pada komponen terkait, seperti database atau layanan web. Biasanya, di IIS dan ASP.NET, Anda menyelesaikan ini dengan menempatkan file bernama App_offline.htm di folder akar situs web atau aplikasi web IIS. File App_offline.htm adalah file HTML standar dan biasanya akan berisi pesan sederhana yang memberi tahu pengguna bahwa situs tersebut untuk sementara tidak tersedia karena pemeliharaan. Meskipun file App_offline.htm ada di folder akar situs web, IIS akan secara otomatis mengalihkan permintaan apa pun ke file. Setelah selesai membuat pembaruan, Anda menghapus file App_offline.htm dan situs web terus melayani permintaan seperti biasa.

Saat Anda menggunakan Web Deploy untuk melakukan penyebaran otomatis atau satu langkah ke lingkungan target, Anda mungkin ingin menggabungkan menambahkan dan menghapus file App_offline.htm ke dalam proses penyebaran Anda. Untuk melakukan ini, Anda harus menyelesaikan tugas tingkat tinggi ini:

  • Dalam file proyek Microsoft Build Engine (MSBuild) yang Anda gunakan untuk mengontrol proses penyebaran, buat target MSBuild yang menyalin file App_offline.htm ke server tujuan sebelum tugas penyebaran dimulai.
  • Tambahkan target MSBuild lain yang menghapus file App_offline.htm dari server tujuan saat semua tugas penyebaran selesai.
  • Dalam proyek aplikasi web, buat file .wpp.targets yang memastikan bahwa file App_offline.htm ditambahkan ke paket penyebaran saat Web Deploy dipanggil.

Topik ini akan menunjukkan kepada Anda cara melakukan prosedur ini. Tugas dan panduan dalam topik ini mengasumsikan bahwa Anda telah membuat solusi yang berisi setidaknya satu proyek aplikasi web, dan bahwa Anda menggunakan file proyek kustom untuk mengontrol proses penyebaran seperti yang dijelaskan dalam Penyebaran Web di Perusahaan. Atau, Anda dapat menggunakan solusi sampel Contact Manager untuk mengikuti contoh dalam topik.

Menambahkan File App_Offline ke Proyek Aplikasi Web

Tugas pertama yang perlu Anda selesaikan adalah menambahkan file App_offline ke proyek aplikasi web Anda:

  • Untuk mencegah file mengganggu proses pengembangan (Anda tidak ingin aplikasi Anda offline secara permanen), Anda harus menyebutnya sesuatu selain App_offline.htm. Misalnya, Anda dapat memberi nama file App_offline-template.htm.
  • Untuk mencegah file disebarkan apa adanya, Anda harus mengatur tindakan build ke Tidak Ada.

Untuk menambahkan file App_offline ke proyek aplikasi web

  1. Buka solusi Anda di Visual Studio 2010.

  2. Di jendela Penjelajah Solusi , klik kanan proyek aplikasi web Anda, arahkan ke Tambahkan, lalu klik Item Baru.

  3. Dalam kotak dialog Tambahkan Item Baru , pilih Halaman HTML.

  4. Dalam kotak Nama , ketik App_offline-template.htm, lalu klik Tambahkan.

    Dalam kotak Nama, ketik App_offline-template.htm, lalu klik Tambahkan.

  5. Tambahkan beberapa HTML sederhana untuk memberi tahu pengguna bahwa aplikasi tidak tersedia, lalu simpan file. Jangan sertakan tag sisi server apa pun (misalnya, tag apa pun yang diawali dengan "asp:").

    Tambahkan beberapa H T M L sederhana untuk memberi tahu pengguna bahwa aplikasi tidak tersedia, lalu simpan file.

  6. Di jendela Penjelajah Solusi , klik kanan file baru, lalu klik Properti.

  7. Di jendela Properti , di baris Tindakan Build , pilih Tidak Ada.

    Di jendela Properti, di baris Tindakan Build, pilih Tidak Ada.

Menyebarkan dan Menghapus File App_Offline

Langkah selanjutnya adalah memodifikasi logika penyebaran Anda untuk menyalin file ke server tujuan di awal proses penyebaran dan menghapusnya di akhir.

Catatan

Prosedur berikutnya mengasumsikan bahwa Anda menggunakan file proyek MSBuild kustom untuk mengontrol proses penyebaran Anda, seperti yang dijelaskan dalam Memahami File Proyek. Jika Anda menyebarkan langsung dari Visual Studio, Anda harus menggunakan pendekatan yang berbeda. Sayed Ibrahim Hashimi menjelaskan salah satu pendekatan seperti itu dalam Cara Membuat Aplikasi Web Anda Offline Selama Penerbitan.

Untuk menyebarkan file App_offline ke situs web IIS tujuan, Anda perlu memanggil MSDeploy.exe menggunakan penyedia Web Deploy contentPath. Penyedia contentPath mendukung jalur direktori fisik dan situs web IIS atau jalur aplikasi, yang menjadikannya pilihan ideal untuk menyinkronkan file antara folder proyek Visual Studio dan aplikasi web IIS. Untuk menyebarkan file, perintah MSDeploy Anda harus menyerupai ini:

msdeploy.exe –verb:sync
             -source:contentPath="[Project folder]\App_offline.template.htm"
             -dest:contentPath="[IIS application path]/App_offline.htm",
              computerName="[Destination web server]"

Untuk menghapus file dari situs tujuan di akhir proses penyebaran, perintah MSDeploy Anda harus menyerupai ini:

msdeploy.exe –verb:delete
             -dest:contentPath="[IIS application path]/App_offline.htm",
              computerName="[Destination web server]"

Untuk mengotomatiskan perintah ini sebagai bagian dari proses build dan penyebaran, Anda perlu mengintegrasikannya ke dalam file proyek MSBuild kustom Anda. Prosedur berikutnya menjelaskan cara melakukan ini.

Untuk menyebarkan dan menghapus file App_offline

  1. Di Visual Studio 2010, buka file proyek MSBuild yang mengontrol proses penyebaran Anda. Dalam solusi sampel Contact Manager , ini adalah file Publish.proj .

  2. Di elemen Proyek akar, buat elemen PropertyGroup baru untuk menyimpan variabel untuk penyebaran App_offline :

    <PropertyGroup>
      <AppOfflineTemplateFilename   
        Condition=" '$(AppOfflineTemplateFilename)'=='' ">
          app_offline-template.htm
      </AppOfflineTemplateFilename>
      <AppOfflineSourcePath 
        Condition=" '$(AppOfflineSourcePath)'==''">
          $(SourceRoot)ContactManager.Mvc\$(AppOfflineTemplateFilename)
      </AppOfflineSourcePath>
    </PropertyGroup>
    
  3. Properti SourceRoot ditentukan di tempat lain dalam file Publish.proj . Ini menunjukkan lokasi folder akar untuk konten sumber yang relatif terhadap jalur saat ini—dengan kata lain, relatif terhadap lokasi file Publish.proj .

  4. Penyedia contentPath tidak akan menerima jalur file relatif, jadi Anda perlu mendapatkan jalur absolut ke file sumber Anda sebelum Anda dapat menyebarkannya. Anda dapat menggunakan tugas ConvertToAbsolutePath untuk melakukan ini.

  5. Tambahkan elemen Target baru bernama GetAppOfflineAbsolutePath. Dalam target ini, gunakan tugas ConvertToAbsolutePath untuk mendapatkan jalur absolut ke file templat App_offline di folder proyek Anda.

    <Target Name="GetAppOfflineAbsolutePath" BeforeTargets="DeployAppOffline">
      <ConvertToAbsolutePath Paths="$(AppOfflineSourcePath)">
        <Output TaskParameter="AbsolutePaths"       
                PropertyName="AppOfflineAbsoluteSourcePath" />
      </ConvertToAbsolutePath>
    </Target>
    
  6. Target ini mengambil jalur relatif ke file templat App_offline di folder proyek Anda dan menyimpannya ke properti baru sebagai jalur file absolut. Atribut BeforeTargets menentukan bahwa Anda ingin target ini dijalankan sebelum target DeployAppOffline , yang akan Anda buat di langkah berikutnya.

  7. Tambahkan target baru bernama DeployAppOffline. Dalam target ini, panggil perintah MSDeploy.exe yang menyebarkan file App_offline Anda ke server web tujuan.

    <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>
    
  8. Dalam contoh ini, properti ContactManagerIisPath ditentukan di tempat lain dalam file proyek. Ini hanyalah jalur aplikasi IIS, dalam bentuk [Nama Situs Web IIS]/[Nama Aplikasi]. Menyertakan kondisi dalam target memungkinkan pengguna untuk mengaktifkan atau menonaktifkan penyebaran App_offline dengan mengubah nilai properti atau memberikan parameter baris perintah.

  9. Tambahkan target baru bernama DeleteAppOffline. Dalam target ini, panggil perintah MSDeploy.exe yang menghapus file App_offline Anda dari server web tujuan.

    <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>
    
  10. Tugas terakhir adalah memanggil target baru ini pada titik yang sesuai selama eksekusi file proyek Anda. Anda dapat melakukan ini dengan berbagai cara. Misalnya, dalam file Publish.proj , properti FullPublishDependsOn menentukan daftar target yang harus dijalankan secara berurutan saat target default FullPublish dipanggil.

  11. Ubah file proyek MSBuild Anda untuk memanggil target DeployAppOffline dan DeleteAppOffline pada titik yang sesuai dalam proses penerbitan.

    <PropertyGroup>
      <FullPublishDependsOn>
        Clean;
        BuildProjects; 
        DeployAppOffline;
        GatherPackagesForPublishing;
        PublishDbPackages;
        DeployTestDBPermissions;
        PublishWebPackages;
        DeleteAppOffline;
      </FullPublishDependsOn> 
    </PropertyGroup>
    <Target Name="FullPublish" DependsOnTargets="$(FullPublishDependsOn)" />
    

Saat Anda menjalankan file proyek MSBuild kustom, file App_offline akan disebarkan ke server segera setelah build berhasil. Kemudian akan dihapus dari server setelah semua tugas penyebaran selesai.

Menambahkan File App_Offline ke Paket Penyebaran

Bergantung pada cara Anda mengonfigurasi penyebaran, konten apa pun yang ada di aplikasi web IIS tujuan—seperti file App_offline.htm —dapat dihapus secara otomatis saat Anda menyebarkan paket web ke tujuan. Untuk memastikan bahwa file App_offline.htm tetap ada selama durasi penyebaran, Anda perlu menyertakan file dalam paket penyebaran web itu sendiri selain menyebarkan file secara langsung di awal proses penyebaran.

  • Jika Anda telah mengikuti tugas sebelumnya dalam topik ini, Anda akan menambahkan file App_offline.htm ke proyek aplikasi web Anda dengan nama file yang berbeda (kami menggunakan App_offline-template.htm) dan Anda akan mengatur tindakan build ke Tidak Ada. Perubahan ini diperlukan untuk mencegah file mengganggu pengembangan dan penelusuran kesalahan. Akibatnya, Anda perlu menyesuaikan proses pengemasan untuk memastikan bahwa file App_offline.htm disertakan dalam paket penyebaran web.

Web Publishing Pipeline (WPP) menggunakan daftar item bernama FilesForPackagingFromProject untuk membuat daftar file yang harus disertakan dalam paket penyebaran web. Anda dapat menyesuaikan isi paket web Anda dengan menambahkan item Anda sendiri ke daftar ini. Untuk melakukan ini, Anda perlu menyelesaikan langkah-langkah tingkat tinggi ini:

  1. Buat file proyek kustom bernama [nama proyek].wpp.targets di folder yang sama dengan file proyek Anda.

    Catatan

    File .wpp.targets perlu masuk ke folder yang sama dengan file proyek aplikasi web Anda—misalnya, ContactManager.Mvc.csproj—daripada di folder yang sama dengan file proyek kustom apa pun yang Anda gunakan untuk mengontrol proses build dan penyebaran.

  2. Dalam file .wpp.targets , buat target MSBuild baru yang dijalankan sebelum target CopyAllFilesToSingleFolderForPackage . Ini adalah target WPP yang membangun daftar hal-hal yang akan disertakan dalam paket.

  3. Di target baru, buat elemen ItemGroup .

  4. Di elemen ItemGroup , tambahkan item FilesForPackagingFromProject dan tentukan file App_offline.htm .

File .wpp.targets harus menyerupai ini:

<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>

Ini adalah poin-poin penting dari catatan dalam contoh ini:

  • Atribut BeforeTargets menyisipkan target ini ke dalam WPP dengan menentukan bahwa itu harus dijalankan segera sebelum target CopyAllFilesToSingleFolderForPackage .
  • Item FilesForPackagingFromProject menggunakan nilai metadata DestinationRelativePath untuk mengganti nama file dari App_offline-template.htm menjadi App_offline.htm saat ditambahkan ke daftar.

Prosedur berikutnya menunjukkan kepada Anda cara menambahkan file .wpp.targets ini ke proyek aplikasi web.

Untuk menambahkan file .wpp.targets ke paket penyebaran web

  1. Buka solusi Anda di Visual Studio 2010.

  2. Di jendela Penjelajah Solusi , klik kanan simpul proyek aplikasi web Anda (misalnya, ContactManager.Mvc), arahkan ke Tambahkan, lalu klik Item Baru.

  3. Dalam kotak dialog Tambahkan Item Baru , pilih templat File XML .

  4. Dalam kotak Nama , ketik [nama proyek].wpp.targets (misalnya, ContactManager.Mvc.wpp.targets), lalu klik Tambahkan.

    Dalam kotak Nama, ketik nama proyek .wpp.targets, lalu klik Tambahkan.

    Catatan

    Jika Anda menambahkan item baru ke simpul akar proyek, file dibuat di folder yang sama dengan file proyek. Anda dapat memverifikasi ini dengan membuka folder di Windows Explorer.

  5. Dalam file , tambahkan markup MSBuild yang dijelaskan sebelumnya.

    <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>
    
  6. Simpan dan tutup file [nama proyek].wpp.targets .

Saat berikutnya Anda membangun dan mengemas proyek aplikasi web Anda, WPP akan secara otomatis mendeteksi file .wpp.targets . File App_offline-template.htm akan disertakan dalam paket penyebaran web yang dihasilkan sebagai App_offline.htm.

Catatan

Jika penyebaran Anda gagal, file App_offline.htm akan tetap ada dan aplikasi Anda akan tetap offline. Ini biasanya perilaku yang diinginkan. Untuk membuat aplikasi Anda kembali online, Anda dapat menghapus file App_offline.htm dari server web Anda. Atau, jika Anda memperbaiki kesalahan apa pun dan menjalankan penyebaran yang berhasil, file App_offline.htm akan dihapus.

Kesimpulan

Topik ini menjelaskan cara membuat aplikasi web offline selama durasi penyebaran, dengan menerbitkan file App_offline.htm ke server tujuan di awal proses penyebaran dan menghapusnya di akhir. Ini juga mencakup cara menyertakan file App_offline.htm dalam paket penyebaran web.

Bacaan lebih lanjut

Untuk informasi selengkapnya tentang proses pengemasan dan penyebaran, lihat Membangun dan Mengemas Proyek Aplikasi Web, Mengonfigurasi Parameter untuk Penyebaran Paket Web, dan Menyebarkan Paket Web.

Jika Anda menerbitkan aplikasi web langsung dari Visual Studio, daripada menggunakan pendekatan file proyek MSBuild kustom yang dijelaskan dalam tutorial ini, Anda harus menggunakan pendekatan yang sedikit berbeda untuk membuat aplikasi Anda offline selama proses penerbitan.