WCF vs ASP.NET Web API [ditutup]

484

Saya telah menghabiskan beberapa bulan mencoba memahami konsep di balik WCF dan baru-baru ini saya telah mengembangkan aplikasi layanan WCF pertama saya.

Saya telah berjuang sedikit untuk memahami semua pengaturan dalam file konfigurasi.
Saya tidak yakin tentang lingkungan tetapi tampaknya Anda dapat melakukan hal-hal luar biasa dengannya.

Suatu hari saya menemukan bahwa Microsoft telah mengeluarkan hal baru yang disebut ASP.NET Web API .

Untuk apa yang saya bisa baca itu adalah kerangka TETAP , sangat mudah digunakan dan diimplementasikan.

Sekarang, saya mencoba mencari tahu apa perbedaan utama antara 2 kerangka kerja dan apakah saya harus mencoba dan mengonversi aplikasi layanan WCF lama saya dengan API baru.

Bisakah seseorang, tolong, bantu saya untuk memahami perbedaan dan penggunaan masing-masing?

LeftyX
sumber
12
+1 pertanyaan menarik. mungkin Anda akan mendapatkan respons yang baik di programmers.stackexchange.com
Mithir
1
Fitur apa dari WCF "lama" yang Anda gunakan? Apakah Anda mencoba membangun API RESTful? Atau RPC, atau SABUN?
marcind
1
@marcind: terima kasih atas jawaban Anda. Ini sebagian besar panggilan tenang. Tidak ada RPC sama sekali.
LeftyX
4
Jawaban bagus lainnya dapat ditemukan di stackoverflow.com/a/9859981/456814
1
keduanya adalah satu dan hal yang sama tetapi perbedaan lama yang orang temui adalah wcf pada dasarnya untuk intranet dan Webapi untuk internet, ya pasti kita bisa membuat wcf tenang juga! pada dasarnya keduanya telah berjalan pada protokol http web.http
LostCoder

Jawaban:

185

API Web ASP.NET yang baru merupakan kelanjutan dari proyek API Web WCF sebelumnya (meskipun beberapa konsep telah berubah ).

WCF pada awalnya dibuat untuk mengaktifkan layanan berbasis SOAP. Untuk layanan RESTful atau RPCish yang lebih sederhana (pikirkan klien seperti jQuery) ASP.NET Web API harus menjadi pilihan yang baik.

marcind
sumber
36
Selain itu: Meskipun WCF menyediakan beberapa dukungan untuk menulis layanan gaya REST, dukungan untuk REST di ASP.NET Web API lebih lengkap dan semua peningkatan fitur REST di masa mendatang akan dibuat di ASP.NET Web API msdn.microsoft.com/en- us / library / jj823172.aspx
Ohad Schneider
6
Sebenarnya WCF pada awalnya dibuat untuk mengimplementasikan lapisan abstraksi antara layanan SOAP atau RPC dan klien. Intinya adalah untuk membuat arsitektur tunggal (ABC) di sekitar kedua panggilan yang sangat berbeda ini dan menangani pipa melalui file konfigurasi.
Scott Marcus
4
Kelemahan nyata dengan ASP.NET Web API adalah tooling kliennya. Visual Studio mendukung alat terintegrasi untuk mendukung entitas klien layanan WCF yang mulus dan generasi layanan. Tidak ada dukungan di API Web. Saya tahu ada HttpClientyang luar biasa, tetapi tidak menangani pembuatan entitas dan serialisasi / deserialisasi.
Shimmy Weitzhandler
1
@ Shimmy Bagaimana dengan generasi layanan menggunakan kesombongan?
Alex78191
1
@ Alex78191 terima kasih atas tanggapan Anda. Bisakah entitas yang dihasilkan memancarkan INotifyPropertyChangedentitas klien? Bagaimana dengan validasi?
Shimmy Weitzhandler
250

Bagi kami, WCF digunakan untuk SOAP dan Web API untuk REST. Saya berharap API Web juga mendukung SOAP. Kami tidak menggunakan fitur-fitur canggih WCF. Berikut ini adalah perbandingan dari MSDN :

masukkan deskripsi gambar di sini

Manish Jain
sumber
1
Dan Web API mendukung OData yang untuk OMSK adalah anugerah.
abbaf33f
12
Sungguh menakjubkan bagaimana MS dengan begitu banyak mengatakan tidak ada yang benar-benar layak. Sebagai contoh, WCF mendukung JSON tetapi informasi ini sangat tersembunyi dalam "perbandingan" ini, sementara dikatakan secara tekstual bahwa WebApi mendukung JSON tidak hanya sekali tetapi dua kali.
magallanes
1
tabel ini tidak ada artinya. "JQuery" (kutipan menakut-nakuti untuk ibukota J) adalah protokol dan / atau format?
hyankov
1
Menarik. MSDN salah dalam menyebutkan HTTP sebagai protokol transport. HTTP adalah protokol lapisan aplikasi.
Ray Tanpa Cinta
80

ASP.net Web API adalah semua tentang GET, POST, PUT, DELETE yang berbasis HTTP dan REST dengan gaya pemrograman ASP.net MVC dan JSON yang dapat dikembalikan; API web adalah untuk semua proses yang ringan dan komponen berbasis HTTP murni. Agar seseorang dapat melanjutkan dengan WCF bahkan untuk layanan web tunggal yang sederhana atau paling sederhana itu akan membawa semua bagasi tambahan. Untuk layanan sederhana dan ringan untuk panggilan dinamis atau ajax selalu WebApi hanya menyelesaikan kebutuhan. Ini dengan rapi melengkapi atau membantu secara paralel dengan ASP.net MVC.

Lihat podcast: Hanselminut Podcast 264 - Ini bukan WCF ayahmu - Semua tentang WebAPI dengan Glenn Block oleh Scott Hanselman untuk informasi lebih lanjut.

Naveen Vijay
sumber
67

Dalam skenario yang tercantum di bawah ini, Anda harus menggunakan WCF:

  1. Jika Anda perlu mengirim data pada protokol seperti TCP, MSMQ atau MIME
  2. Jika klien yang mengkonsumsi hanya tahu cara mengkonsumsi pesan SOAP

API WEB adalah kerangka kerja untuk mengembangkan layanan RESTful / HTTP.

Ada begitu banyak klien yang tidak memahami SOAP seperti Peramban, HTML5, dalam hal ini API WEB adalah pilihan yang baik.

Header layanan HTTP menentukan cara mengamankan layanan, cara menyimpan informasi, jenis badan pesan, dan badan HTTP dapat menentukan jenis konten apa pun seperti HTML, bukan hanya XML sebagai layanan SOAP.

Keris
sumber
7
Ini membuat asumsi bahwa WCF hanya menangani pesan SOAP, asumsi yang salah. Anda dapat mengekspos titik akhir REST pada layanan WCF juga. Saya akan memodifikasinya untuk mengatakan, jika Anda tidak akan menggunakan fitur WCF (lihat pesan tridy) maka Web API masuk akal.
Mike
3
Yep WCF juga Rest .. pada dasarnya Web api adalah bagian dari fungsionalitas WCF yang sesuai jika Anda melakukan aplikasi data gaya CRUD sederhana.
user1496062
41

Sejak menggunakan keduanya sampai sekarang, saya telah menemukan banyak perbedaan antara WCF dan Web API. Kedua tumpukan teknologi cocok untuk skenario yang berbeda, sehingga tidak mungkin untuk mengatakan mana yang lebih baik, ini tergantung pada konfigurasi dan skenario.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

Catatan: Data bukan hanya pandangan saya, tetapi juga dikumpulkan dari situs web resmi lainnya.

Rajput
sumber
12
API Layanan Web juga dapat di-host-sendiri (Owin / Katana) serta dalam layanan Windows
Monis Iqbal
minus 1 untuk membangun tabel menggunakan gambar, bukan HTML karena ini mencegah pengeditan jawaban untuk peningkatan.
Ahsan Ahmed
34

WCF akan memberi Anda begitu banyak di luar kotak, bahkan tidak sebanding dengan apa pun. Kecuali jika Anda ingin melakukan implementasi sendiri (untuk beberapa nama) otentikasi, otorisasi, enkripsi, antrian, pembatasan, pengiriman pesan yang andal, masuk, sesi dan sebagainya. WCF bukan [hanya] layanan web; WCF adalah platform pengembangan untuk SOA.

tridy
sumber
11
Jika saya tidak salah, saya pikir WEB API juga menyediakan sebagian besar fungsi yang Anda daftarkan.
Alex
4
Tidak ada api Web tidak menyediakan hal-hal ini atau menyediakan versi yang sangat sederhana.
user1496062
3
Nah apa itu - apakah itu memberi mereka atau tidak?
5
Untuk otentikasi dan otorisasi, periksa asp.net/web-api/overview/security/… . tl; dr: Ini mendukungnya dengan pasti di IIS. Untuk enkripsi, Anda mungkin perlu menggunakan SSL, ASP.NET secara alami menangani antrian (tapi itu lurus berdasarkan utas pekerja yang tersedia vs permintaan masuk). Sesi ada (tapi saya tidak akan merekomendasikan menggunakan Sesi secara langsung). Logging cukup mudah untuk diatur (melalui ActionFilters atau semacamnya). Alternatif untuk olahpesan yang dapat diandalkan adalah menggunakan SignalR (meskipun tidak persis).
James Haug
7
"Tidak sebanding dengan apa pun" ?? Tidak sepertinya.
bbsimonbb
16

Mengapa saya menjawab:

Saya menghabiskan banyak waktu untuk memahami perbedaan antara kedua teknologi ini. Saya akan meletakkan semua poin di sini yang saya pikir "Jika saya memiliki poin-poin ini pada saat saya bertanya-tanya mencari jawaban ini, maka saya telah memutuskan sebelumnya dalam memilih teknologi yang saya butuhkan."

Sumber informasi:

Microsoft® Visual Studio® 2015 Unleashed

ISBN-13: 978-0-672-33736-9 ISBN-10: 0-672-33736-3

Mengapa ASP.NET Web API dan WCF:

Sebelum membandingkan teknologi ASP.NET Web API dan WCF, penting untuk dipahami bahwa sebenarnya ada dua gaya / standar untuk membuat layanan web: REST (Representational State Transfer) dan SOAP / WSDL. SOAP / WSDL adalah standar asli tempat layanan web dibangun. Namun, sulit untuk menggunakan dan memiliki format pesan besar (seperti XML) yang menurunkan kinerja. Layanan berbasis REST dengan cepat menjadi alternatif. Mereka lebih mudah untuk menulis karena mereka memanfaatkan konstruksi dasar HTTP (GET, POST, PUT, DELETE) dan biasanya menggunakan format pesan yang lebih kecil (seperti JSON). Akibatnya, layanan HTTP berbasis REST sekarang menjadi standar untuk layanan penulisan yang secara ketat menargetkan Web.

Mari kita tentukan tujuan ASP.NET Web API

ASP.NET Web API adalah teknologi Microsoft untuk mengembangkan layanan web HTTP berbasis REST. (Sudah lama menggantikan Microsoft ASMX, yang didasarkan pada SOAP / WSDL.) Web API membuatnya mudah untuk menulis layanan yang kuat berdasarkan protokol HTTP yang dipahami oleh semua browser dan perangkat asli. Ini memungkinkan Anda untuk membuat layanan untuk mendukung aplikasi Anda dan memanggil mereka dari aplikasi web lain, tablet, ponsel, PC, dan konsol game. Mayoritas aplikasi yang ditulis hari ini untuk meningkatkan koneksi Web yang pernah ada menggunakan layanan HTTP dalam beberapa cara.

Sekarang mari kita mendefinisikan tujuan WCF:

Berkomunikasi di Internet tidak selalu merupakan cara yang paling efisien. Misalnya, jika klien dan layanan ada pada teknologi yang sama (atau bahkan mesin yang sama), mereka sering dapat menegosiasikan cara yang lebih efisien untuk berkomunikasi (seperti TCP / IP). Pengembang layanan menemukan diri mereka membuat pilihan yang sama yang mereka coba hindari. Mereka sekarang harus memilih antara menciptakan layanan internal yang efisien dan dapat memiliki akses luas yang ditemukan melalui Internet. Dan, jika mereka harus mendukung keduanya, mereka mungkin harus membuat beberapa versi layanan mereka atau setidaknya proxy terpisah untuk mengakses layanan mereka. Ini adalah masalah yang diselesaikan Microsoft dengan WCF .

Dengan WCF, Anda dapat membuat layanan Anda tanpa memperhatikan batasan. Anda kemudian dapat membiarkan WCF khawatir menjalankan layanan Anda dengan cara yang paling efisien, tergantung pada klien panggilan. Untuk mengelola tugas ini, WCF menggunakan konsep titik akhir. Layanan Anda mungkin memiliki beberapa titik akhir (dikonfigurasi pada waktu desain atau setelah penerapan). Setiap titik akhir menunjukkan bagaimana layanan dapat mendukung klien panggilan: melalui Web, melalui remoting, melalui Antrian Pesan Microsoft (MSMQ), dan banyak lagi. WCF memungkinkan Anda untuk fokus menciptakan fungsi layanan Anda. Ini khawatir tentang cara paling efisien berbicara dengan klien panggilan. Dengan cara ini, satu layanan WCF dapat secara efisien mendukung berbagai jenis klien.

Contoh WCF:

Perhatikan contohnya:

Data pelanggan dibagi di antara aplikasi. Setiap aplikasi dapat ditulis pada platform yang berbeda, dan mungkin ada di lokasi yang berbeda. Anda dapat mengekstraksi antarmuka pelanggan ke layanan WCF yang menyediakan akses umum ke data pelanggan bersama. Ini memusatkan data, mengurangi duplikasi, menghilangkan sinkronisasi, dan menyederhanakan manajemen. Selain itu, dengan menggunakan WCF, Anda dapat mengonfigurasi titik akhir layanan agar berfungsi dengan cara yang masuk akal bagi klien pemanggil. Gambar menunjukkan contoh dari sebelumnya dengan akses terpusat data pelanggan di layanan WCF.

Ini adalah cara WCF melayani klien yang berbeda

Kesimpulan:

i) Kapan memilih API Web:

Tidak dapat disangkal bahwa layanan HTTP berbasis REST seperti yang dibuat menggunakan ASP.NET Web API telah menjadi standar untuk membangun layanan web. Layanan ini menawarkan pendekatan yang mudah dan langsung untuk pengembang web membangun layanan. Pengembang web memahami HTTP GET dan POST dan dengan demikian beradaptasi dengan baik untuk jenis layanan ini. Oleh karena itu, jika Anda menulis layanan yang ditargetkan untuk HTTP , ASP.NET Web API adalah pilihan logis.

ii) Kapan harus memilih WCF:

Teknologi WCF berguna ketika Anda perlu mendukung beberapa titik akhir layanan berdasarkan protokol dan format pesan yang berbeda. Produk-produk seperti Microsoft BizTalk memanfaatkan WCF untuk menciptakan layanan yang kuat yang dapat digunakan melalui Web juga melalui konfigurasi mesin-ke-mesin yang berbeda. Namun, jika Anda perlu menulis aplikasi yang berkomunikasi melalui TCP / IP saat terhubung ke lokal jaringan dan berfungsi melalui HTTP saat berada di luar jaringan, WCF adalah jawaban Anda .

Diperingatkan:

Pengembang web sering melihat WCF sebagai lebih sulit dan kompleks untuk dikembangkan. Oleh karena itu, jika Anda tidak melihat kebutuhan akan layanan multiprotocol, Anda kemungkinan akan tetap menggunakan ASP.NET Web API.

Muhammad Waqas Dilawar
sumber
1
Tolong jangan tambahkan jawaban yang sama untuk beberapa pertanyaan . Jawab yang terbaik dan tandai sisanya sebagai duplikat, setelah Anda mendapatkan reputasi yang cukup. Jika ini bukan duplikat, sesuaikan pos dengan pertanyaan dan beri tanda penghapusan.
Bhargav Rao
12

Ada perbandingan pada MSDN tentang ini

WCF dan ASP.NET Web API

Bagi saya, pilihannya adalah tentang siapa kliennya, dan di mana mereka berada?

Dalam klien berbasis jaringan dan .NET perusahaan: Gunakan WCF dengan ikatan TCP (Komunikasi cepat dari HTTP)

Di luar Jaringan perusahaan, dan gunakan beragam teknologi seperti PHP, Python dll : Gunakan Web API dengan REST

Arshad Mohammad
sumber
9

Secara bisnis, WebApi tidak memiliki WSDL, sehingga pengembang harus mendokumentasikan semua secara manual. Dan jika, misalnya, operasi WebApi mengembalikan daftar objek kemudian, klien harus membuat objek secara manual, yaitu WebAPI sangat rentan terhadap kesalahan definisi.

Pro dari Webapi lebih ringan dari WCF.

magallanes
sumber
3
WCF == WS- *, webapi == REST
BozoJoe
7

Mengenai pernyataan "WebApi tidak memiliki WSDL" ada beberapa cara untuk menghasilkan klien Rest. Salah satu pendekatan yang populer adalah Swagger UI / (Swashbukkle Nuget). Ini memberikan antarmuka yang kaya untuk memahami skema input dan output titik akhir REST dan alat online untuk menguji titik akhir.

JSON LD (Json Linked Documents) adalah standar lain yang muncul yang akan lebih meningkatkan pengalaman pengembang REST berbasis JSON dengan mengekspos skema JSON dengan semantik yang lebih baik.

Venkatesh Muniyandi
sumber
1

Dengan wcf kami dapat mengkonfigurasi dan mengekspos dukungan layanan yang sama untuk beberapa titik akhir seperti tcp, http.jika Anda ingin layanan Anda hanya berbasis http maka akan lebih baik menggunakan API web. Web API memiliki konfigurasi yang sangat sedikit jika dibandingkan dengan WCF dan sedikit lebih cepat dari WCF. Wcf juga mendukung layanan yang tenang. Jika Anda memiliki batasan .Net framework 3.5 maka opsi Anda adalah wcf.

Subramanian Naya
sumber