ASP.NET Penyebaran Web menggunakan Visual Studio: Transformasi File Web.config
oleh Tom Dykstra
Seri tutorial ini menunjukkan kepada Anda cara menyebarkan (menerbitkan) aplikasi web ASP.NET ke Azure App Service Web Apps atau ke penyedia hosting pihak ketiga, dengan menggunakan Visual Studio 2012 atau Visual Studio 2010. Untuk informasi tentang seri ini, lihat tutorial pertama dalam seri ini.
Gambaran Umum
Tutorial ini menunjukkan kepada Anda cara mengotomatiskan proses perubahan file Web.config saat Anda menyebarkannya ke lingkungan tujuan yang berbeda. Sebagian besar aplikasi memiliki pengaturan dalam file Web.config yang harus berbeda ketika aplikasi disebarkan. Mengotomatiskan proses pembuatan perubahan ini membuat Anda tidak perlu melakukannya secara manual setiap kali Anda menyebarkan, yang akan melelahkan dan rawan kesalahan.
Pengingat: Jika Anda mendapatkan pesan kesalahan atau sesuatu tidak berfungsi saat Anda melalui tutorial, pastikan untuk memeriksa halaman pemecahan masalah.
Transformasi Web.config versus parameter Web Deploy
Ada dua cara untuk mengotomatiskan proses perubahan pengaturan file Web.config : Transformasi Web.config dan parameter Web Deploy. File transformasi Web.config berisi markup XML yang menentukan cara mengubah file Web.config saat disebarkan. Anda dapat menentukan perubahan yang berbeda untuk konfigurasi build tertentu dan untuk profil penerbitan tertentu. Konfigurasi build default adalah Debug dan Rilis, dan Anda dapat membuat konfigurasi build kustom. Profil penerbitan biasanya sesuai dengan lingkungan tujuan. (Anda akan mempelajari selengkapnya tentang menerbitkan profil di Menyebarkan ke IIS sebagai tutorial Lingkungan Pengujian.)
Parameter Web Deploy dapat digunakan untuk menentukan berbagai jenis pengaturan yang harus dikonfigurasi selama penyebaran, termasuk pengaturan yang ditemukan dalam file Web.config . Ketika digunakan untuk menentukan perubahan file Web.config , parameter Web Deploy lebih kompleks untuk disiapkan, tetapi berguna ketika Anda tidak tahu nilai yang akan diatur hingga Anda menyebarkan. Misalnya, di lingkungan perusahaan, Anda dapat membuat paket penyebaran dan memberikannya kepada seseorang di departemen IT untuk diinstal dalam produksi, dan orang tersebut harus dapat memasukkan string koneksi atau kata sandi yang tidak Anda ketahui.
Untuk skenario yang dibahas seri tutorial ini, Anda tahu terlebih dahulu semua yang harus dilakukan ke file Web.config , jadi Anda tidak perlu menggunakan parameter Web Deploy. Anda akan mengonfigurasi beberapa transformasi yang berbeda tergantung pada konfigurasi build yang digunakan, dan beberapa yang berbeda tergantung pada profil penerbitan yang digunakan.
Menentukan pengaturan Web.config di Azure
Jika pengaturan file Web.config yang ingin Anda ubah berada di <connectionStrings>
elemen atau <appSettings>
, dan jika Anda menyebarkan ke Web Apps di Azure App Service, Anda memiliki opsi lain untuk mengotomatiskan perubahan selama penyebaran. Anda dapat memasukkan pengaturan yang ingin Diterapkan di Azure di tab Konfigurasi halaman portal manajemen untuk aplikasi web Anda (gulir ke bawah ke pengaturan aplikasi dan bagian string koneksi). Saat Anda menyebarkan proyek, Azure secara otomatis menerapkan perubahan. Untuk informasi selengkapnya, lihat Situs Web Windows Azure: Cara Kerja String Aplikasi dan String Koneksi.
File transformasi default
Di Penjelajah Solusi, perluas Web.config untuk melihat file transformasi Web.Debug.config dan Web.Release.config yang dibuat secara default untuk dua konfigurasi build default.
Anda dapat membuat file transformasi untuk konfigurasi build kustom dengan mengklik kanan file Web.config dan memilih Tambahkan Transformasi Konfigurasi dari menu konteks. Untuk tutorial ini, Anda tidak perlu melakukannya, dan opsi menu dinonaktifkan, karena Anda belum membuat konfigurasi build kustom apa pun.
Nantinya Anda akan membuat tiga file transformasi lagi, masing-masing satu untuk profil penerbitan pengujian, penahapan, dan produksi. Contoh umum pengaturan yang akan Anda tangani dalam file transformasi profil publikasi karena tergantung pada lingkungan tujuan adalah titik akhir WCF yang berbeda untuk pengujian versus produksi. Anda akan membuat file transformasi profil publikasi dalam tutorial selanjutnya setelah membuat profil penerbitan yang digunakan untuk mereka.
Menonaktifkan mode debug
Contoh pengaturan yang bergantung pada konfigurasi build daripada lingkungan tujuan adalah debug
atribut . Untuk build Rilis, Anda biasanya ingin penelusuran kesalahan dinonaktifkan terlepas dari lingkungan mana yang Anda sebarkan. Oleh karena itu, secara default templat proyek Visual Studio membuat file transformasi Web.Release.config dengan kode yang menghapus debug
atribut dari compilation
elemen . Berikut adalah Web.Release.config default: selain beberapa contoh kode transformasi yang dikomentari, ini termasuk kode dalam compilation
elemen yang menghapus debug
atribut:
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>
Atribut xdt:Transform="RemoveAttributes(debug)"
menentukan bahwa Anda ingin debug
atribut dihapus dari system.web/compilation
elemen dalam file Web.config yang disebarkan. Ini akan dilakukan setiap kali Anda menyebarkan build Rilis.
Membatasi akses log kesalahan ke administrator
Jika ada kesalahan saat aplikasi berjalan, aplikasi menampilkan halaman kesalahan generik sebagai pengganti halaman kesalahan yang dihasilkan sistem, dan menggunakan paket Elmah NuGet untuk pengelogan dan pelaporan kesalahan. Elemen customErrors
dalam file Web.config aplikasi menentukan halaman kesalahan:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
Untuk melihat halaman kesalahan, ubah mode
sementara atribut customErrors
elemen dari "RemoteOnly" menjadi "Aktif" dan jalankan aplikasi dari Visual Studio. Menyebabkan kesalahan dengan meminta URL yang tidak valid, seperti Studentsxxx.aspx. Alih-alih halaman kesalahan "Sumber daya yang dihasilkan IIS tidak dapat ditemukan", Anda akan melihat halaman GenericErrorPage.aspx .
Untuk melihat log kesalahan, ganti semuanya di URL setelah nomor port dengan elmah.axd (misalnya, http://localhost:51130/elmah.axd
) dan tekan Enter:
Jangan lupa untuk mengatur customErrors
kembali elemen ke mode "RemoteOnly" setelah selesai.
Di komputer pengembangan Anda, lebih mudah untuk mengizinkan akses gratis ke halaman log kesalahan, tetapi dalam produksi yang akan menjadi risiko keamanan. Untuk situs produksi, Anda ingin menambahkan aturan otorisasi yang membatasi akses log kesalahan ke administrator, dan untuk memastikan bahwa pembatasan berfungsi seperti yang Anda inginkan dalam pengujian dan penahapan juga. Oleh karena itu, ini adalah perubahan lain yang ingin Anda terapkan setiap kali Anda menyebarkan build Rilis, sehingga berada dalam file Web.Release.config .
Buka Web.Release.config dan tambahkan elemen baru location
segera sebelum tag penutup configuration
, seperti yang ditunjukkan di sini.
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
<location path="elmah.axd" xdt:Transform="Insert">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Nilai Transform
atribut "Insert" menyebabkan elemen ini location
ditambahkan sebagai saudara kandung ke elemen yang ada location
dalam file Web.config . (Sudah ada satu location
elemen yang menentukan aturan otorisasi untuk halaman Perbarui Kredit .)
Sekarang Anda dapat mempratinjau transformasi untuk memastikan bahwa Anda mengkodekannya dengan benar.
Di Penjelajah Solusi, klik kanan Web.Release.config dan klik Pratinjau Transformasi.
Halaman terbuka yang menunjukkan file Web.config pengembangan di sebelah kiri dan seperti apa file Web.config yang disebarkan di sebelah kanan, dengan perubahan disorot.
( Dalam pratinjau, Anda mungkin melihat beberapa perubahan tambahan yang tidak Anda tulis transformasinya: ini biasanya melibatkan penghapusan spasi kosong yang tidak memengaruhi fungsionalitas.)
Saat menguji situs setelah penyebaran, Anda juga akan menguji untuk memverifikasi bahwa aturan otorisasi efektif.
Catatan
Catatan Keamanan Tidak pernah menampilkan detail kesalahan kepada publik dalam aplikasi produksi, atau menyimpan informasi tersebut di lokasi publik. Penyerang dapat menggunakan informasi kesalahan untuk menemukan kerentanan di situs. Jika Anda menggunakan ELMAH di aplikasi Anda sendiri, konfigurasikan ELMAH untuk meminimalkan risiko keamanan. Contoh ELMAH dalam tutorial ini tidak boleh dianggap sebagai konfigurasi yang direkomendasikan. Ini adalah contoh yang dipilih untuk mengilustrasikan cara menangani folder tempat aplikasi harus dapat membuat file. Untuk informasi selengkapnya, lihat mengamankan titik akhir ELMAH.
Pengaturan yang akan Anda tangani dalam menerbitkan file transformasi profil
Skenario umumnya adalah memiliki pengaturan file Web.config yang harus berbeda di setiap lingkungan yang Anda sebarkan. Misalnya, aplikasi yang memanggil layanan WCF mungkin memerlukan titik akhir yang berbeda di lingkungan pengujian dan produksi. Aplikasi Contoso University juga mencakup pengaturan semacam ini. Pengaturan ini mengontrol indikator yang terlihat pada halaman situs yang memberi tahu Anda lingkungan tempat Anda berada, seperti pengembangan, pengujian, atau produksi. Nilai pengaturan menentukan apakah aplikasi akan menambahkan "(Dev)" atau "(Test)" ke judul utama di halaman master Site.Master :
Indikator lingkungan dihilangkan ketika aplikasi berjalan dalam penahapan atau produksi.
Halaman web Contoso University membaca nilai yang diatur dalam appSettings
file Web.config untuk menentukan lingkungan apa yang dijalankan aplikasi:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Nilainya harus "Uji" di lingkungan pengujian, dan "Prod" untuk penahapan dan produksi.
Kode berikut dalam file transformasi akan menerapkan transformasi ini:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Nilai xdt:Transform
atribut "SetAttributes" menunjukkan bahwa tujuan transformasi ini adalah untuk mengubah nilai atribut elemen yang ada dalam file Web.config . Nilai xdt:Locator
atribut "Match(key)" menunjukkan bahwa elemen yang akan dimodifikasi adalah yang atributnya key
cocok dengan key
atribut yang ditentukan di sini. Satu-satunya atribut add
elemen lainnya adalah value
, dan itulah yang akan diubah dalam file Web.config yang disebarkan. Kode yang ditampilkan di sini menyebabkan value
atribut Environment
appSettings
elemen diatur ke "Uji" dalam file Web.config yang disebarkan.
Transformasi ini termasuk dalam file transformasi profil publikasi, yang belum Anda buat. Anda akan membuat dan memperbarui file transformasi yang menerapkan perubahan ini saat membuat profil penerbitan untuk lingkungan pengujian, penahapan, dan produksi. Anda akan melakukannya dalam penyebaran ke IIS dan menyebarkan ke tutorial produksi .
Catatan
Karena pengaturan ini ada di <appSettings>
elemen , Anda memiliki alternatif lain untuk menentukan transformasi saat Anda menyebarkan ke Web Apps di Azure App Service Lihat Menentukan pengaturan Web.config di Azure sebelumnya dalam topik ini.
Mengatur string koneksi
Meskipun file transformasi default berisi contoh yang menunjukkan cara memperbarui string koneksi, dalam kebanyakan kasus Anda tidak perlu menyiapkan transformasi string koneksi, karena Anda dapat menentukan string koneksi di profil penerbitan. Anda akan melakukannya dalam penyebaran ke IIS dan menyebarkan ke tutorial produksi .
Ringkasan
Anda sekarang telah melakukan sebanyak yang Anda bisa dengan transformasi Web.config sebelum membuat profil penerbitan, dan Anda telah melihat pratinjau apa yang akan ada di file Web.config yang disebarkan.
Dalam tutorial berikut, Anda akan mengurus tugas penyusunan penyebaran yang memerlukan pengaturan properti proyek.
Informasi Selengkapnya
Untuk informasi selengkapnya tentang topik yang dibahas oleh tutorial ini, lihat Menggunakan transformasi Web.config untuk mengubah pengaturan di file Web.config tujuan atau file app.config selama penyebaran di Peta Konten Penyebaran Web untuk Visual Studio dan ASP.NET.