Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini membahas fitur baru yang membuat penulisan aplikasi WCF lebih sederhana.
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:
- Mengapa kami merekomendasikan gRPC untuk pengembang WCF
- Membandingkan WCF dengan gRPC
- Pengantar gRPC untuk pengembang WCF
File Konfigurasi yang Dihasilkan Yang Disederhanakan
Saat Anda menambahkan referensi layanan di Visual Studio atau menggunakan alat SvcUtil.exe, file konfigurasi klien dibuat. Dalam versi WCF sebelumnya, file konfigurasi ini berisi nilai setiap properti pengikatan meskipun nilainya adalah nilai default. Dalam WCF 4.5, file konfigurasi yang dihasilkan hanya berisi properti pengikatan yang diatur ke nilai non-default.
Berikut ini adalah contoh file konfigurasi yang dihasilkan oleh WCF 3.0.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard" maxBufferSize="65536"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
Berikut ini adalah contoh file konfigurasi yang sama yang dihasilkan oleh WCF 4.5.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
Contract-First Pengembangan
WCF sekarang memiliki dukungan untuk pendekatan pengembangan kontrak-pertama. Alat svcutil.exe memiliki sakelar /serviceContract yang memungkinkan Anda menghasilkan layanan dan kontrak data dari dokumen WSDL.
Menambahkan Referensi Layanan Dari Proyek Subset Portabel
Proyek subset portabel memungkinkan programmer rakitan .NET untuk mempertahankan satu pohon sumber dan sistem build sambil tetap mendukung beberapa implementasi .NET (desktop, Silverlight, Windows Phone, dan Xbox). Proyek subset portabel hanya mereferensikan pustaka portabel .NET yang merupakan rakitan yang dapat digunakan pada implementasi .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.
Mode Kompatibilitas ASP.NET yang Default Diubah
WCF menyediakan 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 aspNetCompatibilityEnabled atribut ke true di bagian <serviceHostingEnvironment> dari web.config. Selain itu, layanan apa pun di appDomain ini harus memiliki RequirementsMode properti pada AspNetCompatibilityRequirementsAttribute set ke Allowed atau Required. Secara default AspNetCompatibilityRequirementsAttribute sekarang diatur ke Allowed dan templat aplikasi layanan WCF default mengatur aspNetCompatibilityEnabled atribut ke true. Untuk informasi selengkapnya, lihat Apa yang Baru di Windows Communication Foundation 4.5 dan Layanan WCF dan ASP.NET.
Peningkatan Streaming
Dukungan baru untuk streaming asinkron telah ditambahkan ke WCF. Untuk mengaktifkan streaming asinkron, tambahkan perilaku titik akhir DispatcherSynchronizationBehavior ke host layanan dan atur properti AsynchronousSendEnabled-nya ke
true. Ini dapat menguntungkan skalabilitas ketika layanan mengirim pesan yang dialirkan ke beberapa klien yang membaca secara perlahan. WCF tidak lagi memblokir thread untuk setiap klien dan akan membebaskan thread tersebut untuk melayani klien lain.Menghapus batasan sekeliling buffer pesan saat layanan dihosting IIS. Dalam versi WCF sebelumnya saat menerima pesan untuk layanan yang dihosting IIS yang menggunakan transfer pesan streaming, ASP.NET akan menyangga seluruh pesan sebelum mengirimkannya ke WCF. Ini akan menyebabkan konsumsi memori besar. Buffering ini telah dihapus di .NET Framework 4.5 dan sekarang layanan WCF yang dihosting IIS dapat mulai memproses aliran masuk sebelum seluruh pesan diterima, sehingga memungkinkan streaming sejati. Ini memungkinkan WCF untuk segera merespons pesan dan memungkinkan peningkatan performa. Selain itu, Anda tidak lagi harus menentukan nilai untuk
maxRequestLength, batas ukuran ASP.NET pada permintaan masuk. Jika properti ini diatur, maka akan diabaikan. Untuk informasi selengkapnya tentangmaxRequestLength, lihat elemen konfigurasi <httpRuntime>. Anda masih perlu mengonfigurasi maxAllowedContentLength, Untuk informasi selengkapnya, lihat Batas Permintaan IIS.
Nilai Default Transportasi Baru
Tabel berikut ini menjelaskan pengaturan yang telah berubah dan tempat menemukan informasi tambahan.
| Harta benda | Aktif | Default Baru | Informasi Selengkapnya |
|---|---|---|---|
| batas waktu inisialisasi saluran | NetTcpBinding | 30 detik | Properti ini menentukan berapa lama koneksi TCP dapat memakan waktu untuk mengautentikasi dirinya sendiri menggunakan protokol .NET Framing. Klien perlu mengirim beberapa data awal sebelum server memiliki informasi yang cukup untuk melakukan autentikasi. Batas waktu ini sengaja dibuat lebih kecil dari ReceiveTimeout (10 menit) sehingga klien berbahaya yang tidak diautentikasi tidak membuat koneksi terikat ke server untuk waktu yang lama. Nilai defaultnya adalah 30 detik. Untuk informasi selengkapnya tentang ChannelInitializationTimeout |
| dengarkanLintasanTertunda | NetTcpBinding | 16 * jumlah prosesor | Properti tingkat soket ini menjelaskan jumlah permintaan "penerimaan tertunda" yang akan diantrekan. Jika antrean backlog listen terisi, permintaan soket baru akan ditolak. Untuk informasi selengkapnya tentang ListenBacklog |
| maxPendingAccepts | ConnectionOrientedTransportBindingElement SMSvcHost.exe |
2 * jumlah prosesor untuk transportasi 4 * jumlah prosesor untuk SMSvcHost.exe |
Properti ini membatasi jumlah saluran yang dapat dinanti server pada pendengar. Ketika MaxPendingAccepts terlalu rendah, akan ada interval waktu kecil di mana semua saluran tunggu telah mulai melayani koneksi, tetapi tidak ada saluran baru yang mulai mendengarkan. Koneksi dapat tiba selama interval ini dan akan gagal karena tidak ada yang menunggunya di server. Properti ini dapat dikonfigurasi dengan mengatur MaxPendingConnections ke angka yang lebih besar. Untuk informasi selengkapnya, lihat MaxPendingAccepts dan Mengonfigurasi Layanan Berbagi Port Net.TCP |
| maxPendingConnections | ConnectionOrientedTransportBindingElement | 12 * jumlah prosesor | Properti ini mengontrol berapa banyak koneksi yang telah diterima transportasi tetapi belum diambil oleh ServiceModel Dispatcher. Untuk mengatur nilai ini, gunakan MaxConnections pada pengikatan atau maxOutboundConnectionsPerEndpoint pada elemen pengikatan. Untuk informasi selengkapnya tentang MaxPendingConnections |
| receiveTimeout | SMSvcHost.exe | 30 detik | Properti ini menentukan batas waktu untuk membaca data pembingkaian TCP dan melakukan pengiriman koneksi dari koneksi yang mendasar. Ini ada untuk membatasi durasi waktu SMSvcHost.exe layanan digunakan untuk membaca data pendahuluan dari sambungan yang masuk. Untuk informasi selengkapnya, lihat Mengonfigurasi Layanan Berbagi Port Net.TCP. |
Nota
Default baru ini hanya digunakan jika Anda menyebarkan layanan WCF pada komputer dengan .NET Framework 4.5. Jika Anda menyebarkan layanan yang sama pada komputer dengan .NET Framework 4.0, maka default .NET Framework 4.0 digunakan. Dalam kasus seperti itu, disarankan untuk mengonfigurasi pengaturan ini secara eksplisit.
XmlDictionaryReaderQuotas
XmlDictionaryReaderQuotas berisi nilai kuota yang dapat dikonfigurasi untuk pembaca kamus XML yang membatasi jumlah memori yang digunakan oleh encoder saat membuat pesan. Meskipun kuota ini dapat dikonfigurasi, nilai default telah berubah untuk mengurangi kemungkinan bahwa pengembang perlu mengaturnya secara eksplisit.
MaxReceivedMessageSize kuota belum diubah sehingga masih dapat membatasi konsumsi memori, mencegah Anda harus berurusan dengan kompleksitas XmlDictionaryReaderQuotas. Tabel berikut menunjukkan kuota, nilai default barunya, dan penjelasan singkat tentang untuk apa setiap kuota digunakan.
| Nama Kuota | Nilai Bawaan | Deskripsi |
|---|---|---|
| MaxArrayLength | Int32.MaxValue | Mendapatkan dan mengatur panjang array maksimum yang diizinkan. Kuota ini membatasi ukuran maksimum dari array tipe dasar yang dikembalikan oleh pembaca XML, termasuk array byte. Kuota ini tidak membatasi konsumsi memori di pembaca XML itu sendiri, tetapi dalam komponen apa pun yang menggunakan pembaca. Misalnya, ketika DataContractSerializer menggunakan pembaca yang diamankan dengan MaxArrayLength, pembaca tersebut tidak akan mendeserialisasi array byte yang ukurannya lebih besar dari kuota ini. |
| MaxBytesPerRead | Int32.MaxValue | Mengambil dan menetapkan jumlah byte maksimum yang boleh dikembalikan pada tiap pembacaan. Kuota ini membatasi jumlah byte yang dibaca dalam satu operasi Baca saat membaca tag mulai elemen dan atributnya. (Dalam kasus yang tidak dialirkan, nama elemen itu sendiri tidak dihitung terhadap kuota). Memiliki terlalu banyak atribut XML dapat menggunakan waktu pemrosesan yang tidak proporsional karena nama atribut harus diperiksa keunikannya. MaxBytesPerRead mengurangi ancaman ini. |
| MaxDepth | 128 simpul dalam | Kuota ini membatasi kedalaman sarang maksimum elemen XML. MaxDepth berinteraksi dengan MaxBytesPerRead: pembaca selalu menyimpan data dalam memori untuk elemen saat ini dan semua leluhurnya, sehingga konsumsi memori maksimum pembaca sebanding dengan produk dari dua pengaturan ini. Saat mendeserialisasi grafik objek yang sangat bersarang, deserializer dipaksa untuk mengakses seluruh tumpukan dan melemparkan yang tidak dapat dipulihkan StackOverflowException. Korelasi langsung ada antara xml bersarang dan objek bersarang untuk DataContractSerializer dan XmlSerializer. MaxDepth digunakan untuk mengurangi ancaman ini. |
| MaxNameTableCharCount | Int32.MaxValue | Kuota ini membatasi jumlah maksimum karakter yang diizinkan dalam nametable. Nametable berisi string tertentu (seperti namespace dan awalan) yang ditemui saat memproses dokumen XML. Karena string ini di-buffer dalam memori, kuota ini digunakan untuk mencegah buffering yang berlebihan ketika streaming diharapkan. |
| MaxStringContentLength | Int32.MaxValue | Kuota ini membatasi ukuran string maksimum yang dikembalikan pembaca XML. Kuota ini tidak membatasi konsumsi memori di pembaca XML itu sendiri, tetapi dalam komponen yang menggunakan pembaca. Misalnya, jika DataContractSerializer menggunakan pembaca yang diamankan dengan MaxStringContentLength, maka string yang lebih besar dari kuota ini tidak akan dideserialisasi. |
Penting
Lihat "Menggunakan XML Dengan Aman" di bawah Pertimbangan Keamanan untuk Data untuk informasi selengkapnya tentang mengamankan data Anda.
Nota
Default baru ini hanya digunakan jika Anda menyebarkan layanan WCF pada komputer dengan .NET Framework 4.5. Jika Anda menyebarkan layanan yang sama pada komputer dengan .NET Framework 4.0, maka default .NET Framework 4.0 digunakan. Dalam kasus seperti itu, disarankan untuk mengonfigurasi pengaturan ini secara eksplisit.
Validasi Konfigurasi WCF
Sebagai bagian dari proses build dalam Visual Studio, file konfigurasi WCF sekarang divalidasi. Daftar kesalahan validasi atau peringatan ditampilkan di Visual Studio jika validasi gagal.
Tips Alat untuk Editor XML
Untuk membantu pengembang layanan WCF baru dan yang sudah ada untuk mengonfigurasi layanan mereka, editor XML Visual Studio sekarang menyediakan tipsalat untuk setiap elemen konfigurasi dan propertinya yang merupakan bagian dari file konfigurasi layanan.
Penyempurnaan BasicHttpBinding
Mengaktifkan satu titik akhir WCF untuk merespons mode autentikasi yang berbeda.
Memungkinkan pengaturan keamanan layanan WCF dikontrol oleh IIS