Bagikan melalui


ASP.NET Penyebaran Web menggunakan Visual Studio: Transformasi File Web.config

oleh Tom Dykstra

Unduh Proyek Starter

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.

Web.config transformasi versus parameter Web Deploy

Ada dua cara untuk mengotomatiskan proses perubahan pengaturan file Web.config : transformasiWeb.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 tutorial Menyebarkan ke IIS sebagai 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 fileWeb.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 pada file Web.config , sehingga 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 ada 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 bagian pengaturan aplikasi dan 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.

Web.config_transform_files

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 di tutorial selanjutnya setelah membuat profil penerbitan yang digunakan.

Menonaktifkan mode debug

Contoh pengaturan yang bergantung pada konfigurasi build daripada lingkungan tujuan adalah debug atribut . Untuk build Rilis, Anda biasanya ingin debugging dinonaktifkan terlepas dari lingkungan mana yang Anda sebarkan. Oleh karena itu, secara default templat proyek Visual Studio membuat Web.Release.config mengubah file dengan kode yang menghapus debug atribut dari compilation elemen . Berikut adalah Web.Release.configdefault : 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 tidak dapat ditemukan" yang dihasilkan IIS, Anda akan melihat halaman GenericErrorPage.aspx .

Halaman kesalahan

Untuk melihat log kesalahan, ganti semua yang ada di URL setelah nomor port dengan elmah.axd (misalnya, http://localhost:51130/elmah.axd) dan tekan Enter:

Halaman ELMAH

Jangan lupa untuk mengatur customErrors kembali elemen ke mode "RemoteOnly" setelah Selesai.

Pada 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 "Sisipkan" 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.

Menu Transformasi Pratinjau

Halaman terbuka yang memperlihatkan kepada Anda file Web.config pengembangan di sebelah kiri dan seperti apa file Web.config yang disebarkan di sebelah kanan, dengan perubahan disorot.

Pratinjau transformasi debug

Cuplikan layar memperlihatkan Pratinjau Web.config dengan file pengembangan di sebelah kiri dan seperti apa file yang disebarkan di sebelah kanan dengan perubahan disorot.

( Dalam pratinjau, Anda mungkin melihat beberapa perubahan tambahan yang tidak Anda tulis transformasinya untuk: ini biasanya melibatkan penghapusan ruang kosong yang tidak memengaruhi fungsionalitas.)

Saat menguji situs setelah penyebaran, Anda juga akan menguji untuk memverifikasi bahwa aturan otorisasi efektif.

Catatan

Catatan Keamanan Jangan 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 menggambarkan 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 fileWeb.config yang harus berbeda di setiap lingkungan tempat Anda menyebarkan. 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

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 tempat aplikasi berjalan:

<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 mengimplementasikan 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 dari 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 EnvironmentappSettings 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 banyak kasus Anda tidak perlu menyiapkan transformasi string koneksi, karena Anda dapat menentukan string koneksi di profil publikasi. Anda akan melakukannya dalam penyebaran ke IIS dan menyebarkan ke tutorial produksi .

Ringkasan

Anda sekarang telah melakukan sebanyak mungkin dengan transformasi Web.config sebelum membuat profil penerbitan, dan Anda telah melihat pratinjau tentang apa yang akan ada dalam file Web.config yang disebarkan.

Cuplikan layar memperlihatkan Pratinjau Web.config dengan file Web.config Asli di sebelah kiri dan seperti apa file Web.config yang Ditransformasi di sebelah kanan dengan perubahan disorot.

Dalam tutorial berikut, Anda akan mengurus tugas penyetelan penyebaran yang memerlukan pengaturan properti proyek.

Informasi Lebih Lanjut

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.