Konfigurasi yang Disederhanakan
Mengonfigurasi layanan Windows Communication Foundation (WCF) bisa menjadi tugas yang kompleks. Ada banyak opsi yang berbeda dan tidak selalu mudah untuk menentukan pengaturan apa yang diperlukan. Meskipun file konfigurasi meningkatkan fleksibilitas layanan WCF, file tersebut juga merupakan sumber bagi banyak orang yang sulit menemukan masalah. .NET Framework 4.6.1 mengatasi masalah ini dan menyediakan cara untuk mengurangi ukuran dan kompleksitas konfigurasi layanan.
Konfigurasi yang Disederhanakan
Dalam file konfigurasi layanan WCF, bagian <system.serviceModel>
berisi elemen <service>
untuk setiap layanan yang dihosting. Elemen <service>
berisi kumpulan elemen <endpoint>
yang menentukan titik akhir yang diekspos untuk setiap layanan dan secara opsional serangkaian perilaku layanan. Elemen <endpoint>
menentukan alamat, pengikatan, dan kontrak yang diekspos oleh titik akhir, dan konfigurasi dan perilaku titik akhir yang mengikat secara opsional. Bagian <system.serviceModel>
juga berisi elemen <behaviors>
yang memungkinkan Anda menentukan perilaku layanan atau titik akhir. Contoh berikut menunjukkan bagian <system.serviceModel>
dari file konfigurasi.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name=MyBindingConfig"
maxBufferSize="100"
maxReceiveBufferSize="100" />
</basicHttpBinding>
</bindings> <services>
<service behaviorConfiguration="MyServiceBehavior"
name="MyService">
<endpoint address=""
binding="basicHttpBinding"
contract="ICalculator"
bindingConfiguration="MyBindingConfig" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
.NET Framework 4.6.1 membuat konfigurasi layanan WCF lebih mudah dengan menghapus persyaratan untuk elemen <service>
. Jika Anda tidak menambahkan bagian <service>
atau menambahkan titik akhir apa pun di bagian <service>
dan layanan Anda tidak secara terprogram menentukan titik akhir apa pun, maka kumpulan titik akhir default secara otomatis ditambahkan ke layanan Anda, satu untuk setiap alamat basis layanan dan untuk setiap kontrak yang diterapkan oleh layanan Anda. Di setiap titik akhir ini, alamat titik akhir sesuai dengan alamat dasar, pengikatan ditentukan oleh skema alamat dasar dan kontrak adalah yang diimplementasikan oleh layanan Anda. Jika Anda tidak perlu menentukan titik akhir atau perilaku layanan apa pun atau membuat perubahan pengaturan pengikatan, Anda tidak perlu menentukan file konfigurasi layanan sama sekali. Jika layanan menerapkan dua kontrak dan host memungkinkan HTTP dan TCP mengangkut host layanan membuat empat titik akhir default, satu untuk setiap kontrak menggunakan setiap transportasi. Untuk membuat titik akhir default, host layanan harus mengetahui pengikatan apa yang akan digunakan. Setelan ini ditentukan di bagian <protocolMappings>
dalam bagian <system.serviceModel>
. Bagian <protocolMappings>
ini berisi daftar skema protokol transportasi yang dipetakan ke jenis pengikatan. Host layanan menggunakan alamat dasar yang diteruskan ke dalamnya untuk menentukan pengikatan mana yang akan digunakan. Contoh berikut menggunakan elemen <protocolMappings>
.
Peringatan
Mengubah elemen konfigurasi default, seperti pengikatan atau perilaku, dapat memengaruhi layanan yang ditentukan dalam tingkat hierarki konfigurasi yang lebih rendah, karena mungkin menggunakan pengikatan dan perilaku default ini. Dengan demikian, siapa pun yang mengubah pengikatan dan perilaku default perlu menyadari bahwa perubahan ini dapat memengaruhi layanan lain dalam hierarki.
Catatan
Layanan yang dihosting di bawah Layanan Informasi Internet (IIS) atau Windows Process Activation Service (WAS) menggunakan direktori virtual sebagai alamat dasar mereka.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" bindingConfiguration="MyBindingConfig"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
<add scheme="net.pipe" binding="netNamedPipeBinding"/>
<add scheme="net.msmq" binding="netMSMQBinding"/>
</protocolMapping>
Dalam contoh sebelumnya, titik akhir dengan alamat dasar yang dimulai dengan skema "http" menggunakan BasicHttpBinding. Dalam contoh sebelumnya, titik akhir dengan alamat dasar yang dimulai dengan skema "http" menggunakan NetTcpBinding. Anda dapat mengganti pengaturan dalam file App.config lokal atau Web.config.
Setiap elemen dalam bagian <protocolMappings>
harus menentukan skema dan pengikatan. Secara opsional, ini dapat menentukan atribut bindingConfiguration
yang menetapkan konfigurasi pengikatan di dalam bagian <bindings>
file konfigurasi. Jika tidak ada bindingConfiguration
yang ditentukan, konfigurasi penjilidan anonim dari jenis penjilidan yang sesuai akan digunakan.
Perilaku layanan dikonfigurasi untuk titik akhir default dengan menggunakan bagian <behavior>
anonim dalam bagian <serviceBehaviors>
. Elemen <behavior>
yang tidak disebutkan namanya dalam <serviceBehaviors>
digunakan untuk mengonfigurasi perilaku layanan. Misalnya, file konfigurasi berikut memungkinkan penerbitan metadata layanan untuk semua layanan dalam host.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors> <!-- No <service> tag is necessary. Default endpoints are added to the service -->
<!-- The service behavior with name="" is picked up by the service -->
</system.serviceModel>
Perilaku titik akhir dikonfigurasi dengan menggunakan bagian <behavior>
anonim dalam <serviceBehaviors>
bagian.
Contoh berikut adalah file konfigurasi yang setara dengan yang ada di awal topik ini yang menggunakan model konfigurasi yang disederhanakan.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding maxBufferSize="100"
maxReceiveBufferSize="100" />
</basicHttpBinding>
</bindings>
<!-- No <service> tag is necessary. Default endpoints will be added to the service -->
<!-- The service behavior with name="" will be picked up by the service -->
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" />
</protocolMapping>
</system.serviceModel>
Penting
Fitur ini hanya berkaitan dengan konfigurasi layanan WCF, bukan konfigurasi klien. Sering kali, konfigurasi klien WCF akan dihasilkan oleh alat seperti svcutil.exe atau menambahkan referensi layanan dari Visual Studio. Jika Anda mengonfigurasi klien WCF secara manual, Anda perlu menambahkan elemen <klien> ke konfigurasi dan menentukan titik akhir yang ingin Anda panggil.