Bagikan melalui


Mengonfigurasi Layanan Menggunakan File Konfigurasi

Mengonfigurasi layanan Windows Communication Foundation (WCF) dengan file konfigurasi memberi Anda fleksibilitas untuk menyediakan titik akhir dan data perilaku layanan pada titik penyebaran alih-alih pada waktu desain. Topik ini menguraikan teknik utama yang tersedia.

Layanan WCF dapat dikonfigurasi menggunakan teknologi konfigurasi .NET Framework. Paling umum, elemen XML ditambahkan ke file Web.config untuk situs Layanan Informasi Internet (IIS) yang menghosting layanan WCF. Elemen memungkinkan Anda untuk mengubah detail seperti alamat titik akhir (alamat aktual yang digunakan untuk berkomunikasi dengan layanan) berbasis mesin demi mesin. Selain itu, WCF menyertakan beberapa elemen yang disediakan sistem yang memungkinkan Anda dengan cepat memilih fitur paling dasar untuk suatu layanan. Dimulai dengan .NET Framework 4, WCF dilengkapi dengan model konfigurasi default baru yang menyederhanakan persyaratan konfigurasi WCF. Jika Anda tidak menyediakan konfigurasi WCF untuk layanan tertentu, runtime secara otomatis mengonfigurasi layanan Anda dengan beberapa titik akhir standar dan pengikatan/perilaku default. Dalam praktiknya, menulis konfigurasi adalah bagian utama dari pemrograman aplikasi WCF.

Untuk informasi selengkapnya, lihat Mengonfigurasi Pengikatan untuk Layanan. Untuk daftar elemen yang paling umum digunakan, lihat Pengikatan yang Disediakan Sistem. Untuk informasi selengkapnya tentang titik akhir, pengikatan, dan perilaku default, lihat Konfigurasi Sederhana dan Konfigurasi Sederhana untuk Layanan WCF.

Penting

Saat menyebarkan skenario berdampingan di mana dua versi layanan yang berbeda disebarkan, hal ini perlu untuk menentukan sebagian nama rakitan yang direferensikan dalam file konfigurasi. Ini karena file konfigurasi dibagikan di semua versi layanan dan dapat berjalan di bawah versi .NET Framework yang berbeda.

System.Configuration: Web.config dan App.config

WCF menggunakan sistem konfigurasi System.Configuration dari .NET Framework.

Saat mengonfigurasi layanan di Visual Studio, gunakan file Web.config atau file App.config untuk menentukan pengaturan. Pilihan nama file konfigurasi ditentukan oleh lingkungan hosting yang Anda pilih untuk layanan. Jika Anda menggunakan IIS untuk menghosting layanan Anda, gunakan file Web.config. Jika Anda menggunakan lingkungan hosting lainnya, gunakan file App.config.

Dalam Visual Studio, file bernama App.config digunakan untuk membuat file konfigurasi akhir. Nama akhir yang benar-benar digunakan untuk konfigurasi tergantung pada nama rakitan. Misalnya, rakitan bernama "Cohowinery.exe" memiliki nama file konfigurasi akhir "Cohowinery.exe.config". Namun, Anda hanya perlu mengubah file App.config. Perubahan yang dilakukan pada file tersebut secara otomatis dilakukan pada file konfigurasi aplikasi akhir pada saat kompilasi.

Dalam menggunakan App.config, mengajukan sistem konfigurasi menggabungkan file App.config dengan konten file Machine.config saat aplikasi dimulai dan konfigurasi diterapkan. Mekanisme ini memungkinkan pengaturan di seluruh mesin ditentukan dalam file Machine.config. File App.config dapat digunakan untuk mengambil alih pengaturan file Machine.config; Anda juga dapat mengunci pengaturan dalam file Machine.config, sehingga dapat digunakan. Dalam kasus Web.config, sistem konfigurasi menggabungkan file Web.config di semua direktori yang mengarah ke direktori aplikasi ke dalam konfigurasi yang diterapkan. Untuk informasi selengkapnya tentang konfigurasi dan prioritas pengaturan, lihat topik di namespace layanan System.Configuration.

Bagian Utama File Konfigurasi

Bagian utama dalam file konfigurasi mencakup elemen berikut.

<system.ServiceModel>

   <services>
   <!-- Define the service endpoints. This section is optional in the new
    default configuration model in .NET Framework 4. -->
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!-- Specify one or more of the system-provided binding elements,
    for example, <basicHttpBinding> -->
   <!-- Alternatively, <customBinding> elements. -->
      <binding>
      <!-- For example, a <BasicHttpBinding> element. -->
      </binding>
   </bindings>

   <behaviors>
   <!-- One or more of the system-provided or custom behavior elements. -->
      <behavior>
      <!-- For example, a <throttling> element. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

Catatan

Bagian pengikatan dan perilaku bersifat opsional dan hanya disertakan jika diperlukan.

Elemen <layanan>

Elemen services berisi spesifikasi untuk semua layanan yang dihosting aplikasi. Dimulai dengan model konfigurasi yang disederhanakan di .NET Framework 4, bagian ini bersifat opsional.

<layanan>

Elemen <layanan>

Setiap layanan memiliki atribut ini:

  • name. Menentukan jenis yang menyediakan penerapan dari kontrak layanan. Ini adalah nama yang sepenuhnya memenuhi syarat yang terdiri dari namespace layanan, titik, lalu nama jenis. Contoh: "MyNameSpace.myServiceType".

  • behaviorConfiguration. Menentukan nama salah satu elemen behavior yang ditemukan dalam elemen behaviors. Perilaku yang ditentukan mengatur tindakan seperti apakah layanan mengizinkan penyamaran. Jika nilainya adalah nama kosong atau tidak ada behaviorConfiguration yang disediakan, maka kumpulan perilaku layanan default ditambahkan ke layanan.

  • < layanan>

Elemen <titik akhir>

Setiap titik akhir memerlukan alamat, pengikatan, dan kontrak, yang diwakili oleh atribut berikut:

  • address. Menentukan Pengidentifikasi Sumber Daya Seragam (URI) layanan, yang dapat berupa alamat absolut atau alamat yang diberikan relatif terhadap alamat dasar layanan. Jika diatur ke string kosong, demikian menunjukkan bahwa titik akhir tersedia pada alamat dasar yang ditentukan saat membuat ServiceHost untuk layanan.

  • binding. Biasanya menentukan pengikatan yang disediakan sistem seperti WSHttpBinding, tetapi juga dapat menentukan pengikatan yang ditentukan pengguna. Pengikatan yang ditentukan menentukan jenis transportasi, keamanan, dan pengodean yang digunakan, serta apakah sesi, transaksi, atau streaming yang andal didukung atau diaktifkan.

  • bindingConfiguration. Jika nilai default pengikatan harus diubah, demikian dapat dilakukan dengan mengonfigurasi elemen binding yang sesuai dalam elemen bindings. Atribut ini harus diberi nilai yang sama dengan atribut name dari elemen binding yang digunakan untuk mengubah default. Jika tidak ada nama yang diberikan, atau tidak ada bindingConfiguration yang ditentukan dalam pengikatan, maka pengikatan default dari jenis pengikatan digunakan di titik akhir.

  • contract. Menentukan antarmuka yang menentukan kontrak. Ini adalah antarmuka yang diterapkan dalam jenis runtime bahasa umum (CLR) yang ditentukan oleh atribut name dari elemen service.

  • <titik akhir>

Elemen <pengikatan>

Elemen bindings berisi spesifikasi untuk semua pengikatan yang dapat digunakan oleh titik akhir mana pun yang ditentukan dalam layanan apa pun.

<bindings>

Elemen <pengikatan>

Elemen binding yang terkandung dalam elemen bindings dapat berupa salah satu pengikatan yang disediakan sistem (lihat Pengikatan yang Disediakan Sistem) atau pengikatan kustom (lihat Pengikatan Kustom). Elemen binding memiliki atribut name yang menghubungkan pengikatan dengan titik akhir yang ditentukan dalam atribut bindingConfiguration dari elemen endpoint. Jika tidak ada nama yang ditentukan, maka pengikatan tersebut sesuai dengan default jenis pengikatan tersebut.

Untuk informasi selengkapnya tentang mengonfigurasi aplikasi dan klien, lihat Mengonfigurasi layanan WCF.

<pengikatan>

Elemen <perilaku>

Ini adalah elemen kontainer untuk elemen behavior yang menentukan perilaku untuk suatu layanan.

<behaviors>

Elemen <perilaku>

Setiap elemen behavior diidentifikasi oleh atribut name dan menyediakan perilaku yang disediakan sistem, seperti <throttling>, atau perilaku kustom. Jika tidak ada nama yang diberikan, maka elemen perilaku tersebut sesuai dengan layanan default atau perilaku titik akhir.

<perilaku>

Cara Menggunakan Konfigurasi Pengikatan dan Perilaku

WCF memudahkan untuk berbagi konfigurasi antar titik akhir menggunakan sistem referensi dalam konfigurasi. Daripada secara langsung menetapkan nilai konfigurasi ke titik akhir, nilai konfigurasi terkait pengikatan dikelompokkan dalam elemen bindingConfiguration di bagian <binding>. Konfigurasi pengikatan adalah grup pengaturan bernama pada pengikatan. Titik akhir kemudian dapat mereferensikan bindingConfiguration berdasarkan nama.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.serviceModel>
  <bindings>
    <basicHttpBinding>
     <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
     <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
     <binding closeTimeout="00:03:00" />  <!-- Default binding for basicHttpBinding -->
    </basicHttpBinding>
     </bindings>
     <services>
      <service name="MyNamespace.myServiceType">
       <endpoint
          address="myAddress" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration1"
          contract="MyContract"  />
       <endpoint
          address="myAddress2" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration2"
          contract="MyContract" />
       <endpoint
          address="myAddress3" binding="basicHttpBinding"
          contract="MyContract" />
       </service>
      </services>
    </system.serviceModel>
</configuration>

name dari bindingConfiguration diatur dalam elemen <binding>. name harus berupa string unik dalam cakupan jenis pengikatan—dalam hal ini <basicHttpBinding> atau nilai kosong untuk merujuk pada pengikatan default. Titik akhir tertaut pada konfigurasi dengan mengatur atribut bindingConfiguration ke string ini.

behaviorConfiguration diterapkan dengan cara yang sama, seperti yang diilustrasikan dalam sampel berikut.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myBehavior">
           <callbackDebug includeExceptionDetailInFaults="true" />
         </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>

    </behaviors>
    <services>
     <service name="NewServiceType">
       <endpoint
          address="myAddress3" behaviorConfiguration="myBehavior"
          binding="basicHttpBinding"
          contract="MyContract" />
      </service>
    </services>
   </system.serviceModel>
</configuration>

Perhatikan bahwa kumpulan perilaku layanan default ditambahkan ke layanan. Sistem ini memungkinkan titik akhir untuk berbagi konfigurasi umum tanpa mendefinisikan ulang pengaturan. Jika cakupan seluruh mesin diperlukan, buatlah konfigurasi pengikatan atau perilaku di Machine.config. Pengaturan konfigurasi tersedia dalam semua file App.config. Alat Editor Konfigurasi (SvcConfigEditor.exe) memudahkan pembuatan konfigurasi.

Penggabungan Perilaku

Fitur penggabungan perilaku membuatnya lebih mudah untuk mengelola perilaku saat Anda ingin serangkaian perilaku umum digunakan secara konsisten. Fitur ini memungkinkan Anda untuk menentukan perilaku pada berbagai tingkat hierarki konfigurasi dan memiliki layanan yang mewarisi perilaku dari beberapa tingkat hierarki konfigurasi. Untuk mengilustrasikan cara kerjanya, asumsikan Anda memiliki tata letak direktori virtual berikut di IIS:

~\Web.config~\Service.svc~\Child\Web.config~\Child\Service.svc

Dan file ~\Web.config Anda memiliki konten berikut:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Dan Anda memiliki turunan Web.config yang terletak di ~\Child\Web.config dengan konten berikut:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Layanan yang terletak di ~\Child\Service.svc akan berperilaku seolah-olah memiliki perilaku serviceDebug dan serviceMetadata. Layanan yang terletak di ~\Service.svc hanya akan memiliki perilaku serviceDebug. Apa yang terjadi adalah dua kumpulan perilaku dengan nama yang sama (dalam hal ini string kosong) digabungkan.

Anda juga dapat menghapus kumpulan perilaku dengan menggunakan tag <hapus> dan menghapus perilaku individual dari kumpulan dengan menggunakan tag <hapus>. Misalnya, dua hasil konfigurasi berikut dalam layanan turunan hanya memiliki perilaku serviceMetadata:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <remove name="serviceDebug"/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <clear/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Penggabungan perilaku dilakukan untuk kumpulan perilaku tanpa nama seperti yang ditunjukkan di atas dan juga kumpulan perilaku bernama.

Penggabungan perilaku berfungsi di lingkungan hosting IIS, di mana file Web.config bergabung secara hierarkis dengan file Web.config akar dan machine.config. Tetapi juga berfungsi di lingkungan aplikasi, di mana machine.config dapat bergabung dengan file App.config.

Penggabungan perilaku berlaku untuk perilaku titik akhir dan perilaku layanan dalam konfigurasi.

Jika kumpulan perilaku turunan berisi perilaku yang sudah ada dalam kumpulan perilaku induk, perilaku turunan akan mengambil alih induk. Jadi, jika kumpulan perilaku induk memiliki <serviceMetadata httpGetEnabled="False" /> dan koleksi perilaku turunan memiliki <serviceMetadata httpGetEnabled="True" />, perilaku anak akan mengambil alih perilaku induk dalam kumpulan perilaku dan httpGetEnabled akan menjadi "true".

Lihat juga