Cara: Menyesuaikan Pengikatan yang Disediakan Sistem
Windows Communication Foundation (WCF) meliputi beberapa pengikatan yang disediakan sistem yang memungkinkan Anda mengonfigurasi beberapa properti elemen pengikatan yang mendasar, tetapi tidak semua properti. Topik ini menunjukkan cara mengatur properti pada elemen pengikatan untuk membuat pengikatan kustom.
Untuk informasi selengkapnya tentang cara membuat dan mengonfigurasi langsung elemen pengikatan tanpa menggunakan pengikatan yang disediakan sistem, lihat Pengikatan Kustom.
Untuk mengetahui informasi selengkapnya tentang cara membuat dan memperluas pengikatan kustom, lihat Memperluas Pengikatan.
Dalam WCF semua pengikatan terdiri dari elemen pengikatan. Setiap elemen pengikatan adalah turunan dari kelas BindingElement. Pengikatan yang disediakan sistem seperti BasicHttpBinding membuat dan mengonfigurasi elemen pengikatannya sendiri. Topik ini menunjukkan kepada Anda cara mengakses dan mengubah properti elemen pengikatan berikut, yang tidak secara langsung terekspos pada pengikatan; khususnya, kelas BasicHttpBinding.
Elemen pengikatan individu disimpan dalam koleksi yang diwakili oleh kelas BindingElementCollection dan ditambahkan dengan urutan berikut: Alur Transaksi, Sesi Andal, Keamanan, Dupleks Komposit, Satu arah, Keamanan Aliran, Pengodean Pesan, dan Transportasi. Perhatikan bahwa tidak semua elemen pengikatan yang tercantum diperlukan dalam setiap pengikatan. Elemen pengikatan yang ditentukan pengguna juga dapat muncul dalam koleksi elemen pengikatan ini dan harus muncul dalam urutan yang sama seperti yang dijelaskan sebelumnya. Misalnya, transportasi yang ditentukan pengguna harus menjadi elemen terakhir dari koleksi elemen pengikatan.
Kelas BasicHttpBinding berisi tiga elemen pengikatan:
Elemen pengikatan keamanan opsional, baik kelas AsymmetricSecurityBindingElement yang digunakan dengan transportasi HTTP (keamanan tingkat pesan) atau kelas TransportSecurityBindingElement, yang digunakan ketika lapisan transportasi memberikan keamanan, dalam hal ini transportasi HTTPS digunakan.
Elemen pengikatan pengenkode pesan yang diperlukan, baik TextMessageEncodingBindingElement atau MtomMessageEncodingBindingElement.
Elemen pengikatan transportasi yang diperlukan, baik HttpTransportBindingElement atau HttpsTransportBindingElement.
Dalam contoh ini kita membuat instans pengikatan, menghasilkan pengikatan kustom darinya, memeriksa elemen pengikatan dalam pengikatan kustom, dan saat menemukan elemen pengikatan HTTP, kita mengatur properti KeepAliveEnabled
-nya ke false
. Properti KeepAliveEnabled
tidak diekspos langsung pada BasicHttpBinding
, jadi kita harus membuat pengikatan kustom untuk menavigasi ke elemen pengikatan dan mengatur properti ini.
Untuk mengubah pengikatan yang disediakan sistem
Buat instans kelas BasicHttpBinding dan atur mode keamanannya ke tingkat pesan.
// Create an instance of the T:System.ServiceModel.BasicHttpBinding // class and set its security mode to message-level security. BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate; binding.Security.Mode = BasicHttpSecurityMode.Message;
' Create an instance of the T:System.ServiceModel.BasicHttpBinding ' class and set its security mode to message-level security. Dim binding As New BasicHttpBinding() With binding.Security .Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate .Mode = BasicHttpSecurityMode.Message End With
Buat pengikatan kustom dari pengikatan dan buat kelas BindingElementCollection dari salah satu properti pengikatan kustom.
// Create a custom binding from the binding CustomBinding cb = new CustomBinding(binding); // Get the BindingElementCollection from this custom binding BindingElementCollection bec = cb.Elements();
' Create a custom binding from the binding Dim cb As New CustomBinding(binding) ' Get the BindingElementCollection from this custom binding Dim bec = cb.Elements
Ulangi melalui kelas BindingElementCollection, dan saat Anda menemukan kelas HttpTransportBindingElement, atur properti KeepAliveEnabled-nya ke
false
.// Loop through the collection, and when you find the HTTP binding element // set its KeepAliveEnabled property to false foreach (BindingElement be in bec) { Type thisType = be.GetType(); Console.WriteLine(thisType); if (be is HttpTransportBindingElement) { HttpTransportBindingElement httpElement = (HttpTransportBindingElement)be; Console.WriteLine("\tBefore: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled); httpElement.KeepAliveEnabled = false; Console.WriteLine("\tAfter: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled); } }
' Loop through the collection, and when you find the HTTP binding element ' set its KeepAliveEnabled property to false For Each be In bec Dim thisType = be.GetType() Console.WriteLine(thisType) If TypeOf be Is HttpTransportBindingElement Then Dim httpElement As HttpTransportBindingElement = CType(be, HttpTransportBindingElement) Console.WriteLine(Constants.vbTab & "Before: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled) httpElement.KeepAliveEnabled = False Console.WriteLine(vbTab & "After: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled) End If Next be