Fitur Baru WCF 4.5

Topik ini membahas fitur baru di WCF versi 4.5.

gRPC sebagai alternatif untuk WCF

gRPC adalah kerangka kerja RPC modern yang merupakan alternatif populer untuk WCF. gRPC dibangun di atas HTTP/2, yang memberikan sejumlah keunggulan daripada WCF, termasuk:

  • Performa: gRPC jauh lebih efisien daripada WCF, terutama untuk koneksi yang berjalan lama.
  • Skalabilitas: gRPC dirancang untuk menskalakan ke sejumlah besar klien dan server.
  • Keamanan: gRPC mendukung berbagai mekanisme keamanan, termasuk TLS dan autentikasi.
  • Lintas platform: gRPC netral terhadap platform dan dapat digunakan dengan berbagai bahasa pemrograman.

Untuk informasi selengkapnya tentang mengembangkan atau memigrasikan aplikasi WCF ke gRPC, lihat:

Fitur Penyederhanaan WCF

Banyak pekerjaan telah dilakukan untuk membuat aplikasi WCF 4.5 lebih mudah dikembangkan dan dirawat. Untuk informasi selengkapnya, lihat Fitur Penyederhanaan WCF.

Dukungan Asinkron Berbasis Tugas

Secara default, Tambahkan Referensi Layanan menghasilkan metode operasi layanan asinkron yang dikembalikan tugas. Ini dilakukan untuk metode sinkron dan asinkron. Hal ini memungkinkan Anda memanggil operasi layanan secara asinkron menggunakan model pemrograman asinkron berbasis Tugas baru. Saat Anda memanggil metode proksi yang dihasilkan, WCF membangun objek Tugas untuk mewakili operasi asinkron dan mengembalikan Tugas tersebut kepada Anda. Tugas akan selesai ketika operasi selesai. Saat menerapkan operasi asinkron, Anda dapat menerapkannya sebagai operasi asinkron berbasis tugas. Untuk informasi selengkapnya, lihat Operasi Sinkron dan Asinkron.

File Konfigurasi yang Disederhanakan

Saat Anda menambahkan referensi layanan di Visual Studio atau menggunakan alat SvcUtil.exe, file konfigurasi klien akan dibuat. Dalam WCF versi sebelumnya, file konfigurasi ini berisi nilai setiap properti pengikatan meskipun nilainya berupa nilai default. Di WCF 4.5, file konfigurasi yang dibuat hanya berisi properti pengikatan yang diatur ke nilai non-default.

Untuk informasi selengkapnya, lihat Fitur Penyederhanaan WCF.

Pengembangan Kontrak-Pertama

WCF kini memiliki dukungan untuk pengembangan kontrak-pertama. svcutil.exe memiliki sakelar /serviceContract yang memungkinkan Anda menghasilkan kontrak layanan dan data dari dokumen WSDL.

Menambahkan Referensi Layanan Dari Proyek Subset Portabel

Proyek subset portabel memungkinkan pemrogram perakitan .NET untuk mempertahankan pohon sumber tunggal dan membangun sistem sambil tetap mendukung beberapa platform .NET (desktop, Silverlight, Windows Phone, dan Xbox). Proyek subset portabel hanya mereferensikan pustaka portabel .NET yang merupakan rakitan yang dapat digunakan pada platform .NET apa pun. Pengalaman pengembang sama dengan menambahkan referensi layanan dalam aplikasi klien WCF lainnya. Untuk informasi selengkapnya, lihat Menambahkan Referensi Layanan di Proyek Subset Portabel.

Default Mode Kompatibilitas ASP.NET Diubah

WCF dilengkapi mode kompatibilitas ASP.NET untuk memberi pengembang akses penuh ke fitur dalam alur HTTP ASP.NET saat menulis layanan WCF. Untuk menggunakan mode ini, Anda harus mengatur atribut aspNetCompatibilityEnabled ke benar di bagian <serviceHostingEnvironment> web.config. Selain itu, layanan apa pun dalam appDomain ini harus memiliki properti RequirementsMode pada AspNetCompatibilityRequirementsAttribute-nya yang diatur ke Allowed atau Required. Secara default AspNetCompatibilityRequirementsAttribute kini diatur ke Allowed. Untuk informasi selengkapnya, lihat Layanan WCF dan ASP.NET.

Nilai Default Transportasi Baru

Untuk menyederhanakan konfigurasi, sejumlah nilai default properti transportasi telah diubah. Untuk informasi selengkapnya, lihat Fitur Penyederhanaan WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas berisi nilai kuota yang dapat dikonfigurasi untuk pembaca kamus XML yang membatasi jumlah memori yang digunakan oleh pengenkode saat membuat pesan. Meskipun kuota ini dapat dikonfigurasi, nilai default telah berubah untuk mengurangi kemungkinan bahwa pengembang perlu mengaturnya secara eksplisit. Untuk informasi selengkapnya, lihat Fitur Penyederhanaan WCF.

Validasi Konfigurasi WCF

Sebagai bagian dari proses build dalam Visual Studio, file konfigurasi WCF kini divalidasi untuk atribut yang ditentukan dalam proyek. Daftar kesalahan atau peringatan validasi ditampilkan di Visual Studio jika validasi gagal.

Tip-alat Editor XML

Untuk memudahkan pengembang layanan WCF yang telah ada dan yang baru mengonfigurasi layanan mereka, editor XML Visual Studio kini menyediakan tip-alat untuk setiap elemen konfigurasi dan propertinya yang merupakan bagian dari file konfigurasi layanan.

Peningkatan Streaming

Dukungan tambahan untuk streaming asinkron sejati, di mana sisi kirim kini tidak memblokir utas jika sisi terima tidak membaca atau lambat dalam membaca sehingga meningkatkan skalabilitas. Hapus batasan buffering pesan ketika klien mengirim pesan streaming ke layanan WCF yang dihosting IIS. Untuk informasi selengkapnya, lihat Fitur Penyederhanaan WCF.

Menyederhanakan Mengekspos Titik Akhir melalui HTTPS dengan IIS

Pemetaan protokol HTTPS telah ditambahkan untuk menyederhanakan mengekspos titik akhir melalui HTTPS. Untuk mengaktifkan titik akhir HTTPS, pastikan situs web Anda memiliki pengikatan HTTPS dan sertifikat SSL yang dikonfigurasi, lalu cukup aktifkan HTTPS untuk direktori virtual yang menghosting layanan. Jika metadata diaktifkan untuk layanan, metadata juga akan diekspos melalui HTTPS.

Menghasilkan Dokumen WSDL Tunggal

Beberapa tumpukan pemrosesan WSDL pihak ke-tiga tidak dapat memproses dokumen WSDL yang memiliki dependensi pada dokumen lain melalui xsd:import. WCF kini memungkinkan Anda untuk menentukan bahwa semua informasi WSDL dikembalikan dalam satu dokumen. Untuk meminta dokumen WSDL tunggal, tambahkan "?singleWSDL" ke URI saat meminta metadata dari layanan.

Dukungan WebSocket

WebSockets adalah teknologi yang menyediakan komunikasi dua arah sejati melalui port 80 dan 443 dengan karakteristik performa yang mirip dengan TCP. Dua pengikatan baru telah ditambahkan untuk mendukung komunikasi melalui transportasi WebSocket. NetHttpBinding dan NetHttpsBinding. Untuk informasi selengkapnya, lihat: Pengikatan yang Disediakan Sistem.

Nilai Default Transportasi Baru

Tabel berikut menjelaskan pengaturan yang telah diubah dan tempat untuk mendapatkan informasi tambahan.

Properti Aktif Default Baru Untuk informasi selengkapnya, lihat
channelInitializationTimeout NetTcpBinding 30 detik ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * jumlah prosesor ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * jumlah prosesor untuk transportasi

4 * jumlah prosesor untuk SMSvcHost.exe
MaxPendingAcceptsMengonfigurasi Layanan Berbagi Port Net.TCP
maxPendingConnections ConnectionOrientedTransportBindingElement 12 * jumlah prosesor MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 detik Mengonfigurasi Layanan Berbagi Port Net.TCP

Mengonfigurasi Layanan WCF dalam Kode

Windows Communication Foundation (WCF) memungkinkan pengembang untuk mengonfigurasi layanan menggunakan file konfigurasi atau kode. File konfigurasi berguna saat layanan perlu dikonfigurasi setelah disebarkan. Saat menggunakan file konfigurasi, profesional TI hanya perlu memperbarui file konfigurasi, tidak diperlukan rekompilasi. File konfigurasi, bagaimana pun, dapat menjadi rumit dan sulit untuk dipertahankan. Tidak ada dukungan untuk debugging file konfigurasi dan elemen konfigurasi yang direferensikan oleh nama yang membuat penulisan file konfigurasi rawan kesalahan dan sulit. WCF juga memungkinkan Anda untuk mengonfigurasi layanan dalam kode. Dalam versi WCF sebelumnya (4.0 dan sebelumnya) mengonfigurasi layanan dalam kode merupakan hal yang mudah dalam skenario yang dihost sendiri, kelas ServiceHost memungkinkan Anda mengonfigurasi titik akhir dan perilaku sebelum memanggil ServiceHost.Open. Namun, dalam skenario yang dihosting web, Anda tidak memiliki akses ke kelas ServiceHost. Untuk mengonfigurasi layanan yang dihosting web, Anda diharuskan membuat System.ServiceModel.ServiceHostFactory yang membuat ServiceHostFactory dan melakukan konfigurasi yang diperlukan. Dimulai dengan .NET Framework 4.5, WCF menyediakan cara yang lebih mudah untuk mengonfigurasi layanan yang dihosting sendiri dan dihosting web dalam kode. Untuk informasi selengkapnya, lihat Mengonfigurasi Layanan WCF dalam Kode.

Penembolokan ChannelFactory

Aplikasi klien WCF menggunakan kelas ChannelFactory<TChannel> untuk membuat saluran komunikasi dengan layanan WCF. Membuat instans ChannelFactory<TChannel> menimbulkan beberapa overhead karena melibatkan operasi berikut:

  1. Membangun pohon ContractDescription

  2. Mencerminkan semua jenis CLR yang diperlukan

  3. Membangun tumpukan saluran

  4. Membuang sumber daya

Untuk membantu meminimalkan overhead ini, WCF dapat menyimpan pabrik saluran saat Anda menggunakan proksi klien WCF. Untuk informasi selengkapnya, lihat Pabrik Saluran dan Penembolokan.

Kompresi dan Encoder Biner

Dimulai dengan WCF 4.5, penyandi biner WCF menambahkan dukungan untuk pemadatan. Jenis pemadatan dikonfigurasi dengan properti CompressionFormat. Klien dan layanan harus mengonfigurasi properti CompressionFormat. Kompresi akan bekerja untuk protokol HTTP, HTTPS, dan TCP. Jika klien menentukan untuk menggunakan pemadatan tetapi layanan tidak mendukungnya, pengecualian protokol dilemparkan, menunjukkan ketidakcocokan protokol. Untuk informasi selengkapnya, lihat Memilih Penyandi Pesan.

UDP

Dukungan telah ditambahkan untuk transportasi UDP yang memungkinkan pengembang menulis layanan yang menggunakan pesan "fire and forget". Klien mengirim pesan ke layanan dan mengharapkan respons dari layanan.

Dukungan Autentikasi Ganda

Dukungan telah ditambahkan untuk mendukung beberapa mode autentikasi, seperti yang didukung oleh IIS, pada satu titik akhir WCF saat menggunakan transportasi HTTP dan keamanan transportasi. IIS memungkinkan Anda mengaktifkan beberapa mode autentikasi pada direktori virtual, fitur ini memungkinkan titik akhir WCF tunggal untuk mendukung beberapa mode autentikasi yang diaktifkan untuk direktori virtual tempat layanan WCF dihosting.

Dukungan IDN

Dukungan telah ditambahkan untuk memungkinkan layanan WCF dengan Nama Domain Internasional. Untuk informasi selengkapnya, lihat WCF dan Nama Domain Internasional.

HttpClient

Kelas baru yang disebut HttpClient telah ditambahkan untuk membuat pekerjaan dengan permintaan HTTP jauh lebih mudah. Untuk informasi selengkapnya, lihat HttpClient dan Panduan untuk menggunakan HttpClient.

IntelliSense Konfigurasi

Nilai atribut dalam file konfigurasi untuk atribut kustom yang ditentukan dalam proyek kini mendukung IntelliSense untuk memfasilitasi pekerjaan dengan konfigurasi cepat dan akurat.

Tip-alat Konfigurasi

Elemen dan atribut WCF kini memiliki tip-alat di editor XML, untuk mengidentifikasi tujuan elemen atau atribut dengan lebih mudah dan akurat.

Menempelkan Data sebagai Kelas

Dalam proyek WCF, tipe data yang ditentukan dalam XML (seperti yang diekspos dalam layanan) dapat ditempelkan langsung ke halaman kode. Jenis XML akan ditempelkan sebagai jenis CLR. Lihat Membuat Kelas Jenis Data dari XML untuk detail selengkapnya.

Titik akhir WebServiceHost dan default

Di Visual Studio 2010, WebServiceHost secara otomatis membuat titik akhir default, baik Anda menentukan titik akhir secara eksplisit atau pun tidak. Pada Visual Studio 2012 dan yang lebih baru, WebServiceHost hanya membuat titik akhir default jika tidak ada titik akhir yang ditambahkan secara eksplisit. Jika klien Anda mengharapkan titik akhir default, Anda dapat secara eksplisit menambahkan titik akhir dan mengarahkan klien ke titik akhir tersebut. Atau, Anda dapat memberi tahu WCF untuk kembali ke perilaku sebelumnya dengan menambahkan pengaturan berikut ke file konfigurasi aplikasi Anda

<appSettings>
    <add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
  </appSettings>

IHttpCookieContainerManager

Antarmuka yang diekspos oleh IChannelFactory<TChannel> ini menjadikan bekerja dengan cookie di sisi klien jauh lebih mudah. Ketika AllowCookies diatur ke benar pada pengikatan, Anda dapat mengakses cookie dengan menggunakan kode berikut:

IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;

Anda kemudian dapat mengambil atau mengatur cookie dari CookieContainer. Ketika AllowCookies diatur ke salah, Anda dapat mengambil cookie secara manual menggunakan OperationContext dan mengirimkannya dalam permintaan lain menggunakan OperationContext lain atau pemeriksa pesan. Antarmuka IHttpCookieContainerManager memungkinkan Anda mengautentikasi pengguna dengan layanan dan menggunakan cookie autentikasi yang dikembalikan oleh layanan tersebut untuk mengautentikasi dengan layanan lain.