Apa perbedaan antara layanan web WCF dan ASMX?

375

Saya benar-benar bingung antara layanan web WCF dan ASMX. Saya telah menggunakan banyak layanan web pada tahap awal saya, dan sekarang ada hal baru yang diperkenalkan yang disebut WCF. Saya masih bisa membuat WCF yang berfungsi sebagai layanan web. Saya pikir akan ada lebih banyak barang di WCF.

Apa perbedaan antara WCF dan layanan Web? Kapan masing-masing digunakan?

Shailesh
sumber
5
Tidak mungkin ini adalah pertanyaan rekomendasi. Baik ASMX maupun WCF bukanlah produk. Mereka adalah dua iterasi layanan web dalam tumpukan Microsoft. Pertanyaannya adalah apa perbedaannya, dan apakah ada baiknya saya mempelajari yang baru? Ini bukan hal yang sama dengan "haruskah saya menggunakan kontrol Telerik atau Infragistics.
John Saunders

Jawaban:

391

Keith Elder membandingkan ASMX dengan WCF di sini. Coba lihat.

Perbandingan lain dari ASMX dan WCF dapat ditemukan di sini - Saya tidak 100% setuju dengan semua poin di sana, tetapi mungkin memberi Anda ide.

WCF pada dasarnya adalah "ASMX pada stereoids" - bisa jadi itu yang bisa dilakukan ASMX - plus banyak lagi! .

ASMX adalah:

  • mudah dan sederhana untuk menulis dan mengkonfigurasi
  • hanya tersedia di IIS
  • hanya dapat dipanggil dari HTTP

WCF dapat:

  • dihosting di IIS, Layanan Windows, aplikasi Winforms, aplikasi konsol - Anda memiliki kebebasan total
  • digunakan dengan HTTP (REST dan SOAP), TCP / IP, MSMQ dan banyak lagi protokol

Singkatnya: WCF ada di sini untuk menggantikan ASMX sepenuhnya.

Lihat Pusat Pengembang WCF di MSDN .

Pembaruan: tautan tampaknya sudah mati - coba ini: Apa itu Windows Communication Foundation?

marc_s
sumber
15
Dengan visual studio 2010 .net 4.0 WCF semudah menulis ASMX, tidak ada alasan untuk menulis ASMX lagi. WCF jauh lebih cepat, lebih fleksibel, lebih aman. ASMX adalah peninggalan dan tidak ada yang tetap harus menulisnya.
Tom Stickel
13
"Sebagian besar pengembang salah berasumsi bahwa ASMX memerlukan IIS; bagaimanapun, ini adalah satu-satunya kasus penggunaan yang pernah mereka lihat. Tetapi kenyataannya ASMX tidak memiliki ketergantungan teknis pada IIS sama sekali." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@ MrNick: benar. Tidak ada IIS, tetapi tetap hanya HTTP, dan bandingkan kode untuk hosting ASMX dengan kode untuk hosting layanan WCF.
John Saunders
1
Sayangnya tautan keithelder.net/2008/10/17/wcf-vs-asmx-webservices rusak.
Robert
2
@codemonkeyliketab: responsnya sudah lebih dari 6 tahun - tahun cahaya di era internet! Saya mencoba mencari pengganti untuk Pusat Pengembang WCF - lihat pembaruan saya
marc_s
37

Layanan Web ASMX hanya dapat dipanggil oleh HTTP (layanan web tradisional dengan .asmx). Sementara Layanan WCF atau komponen WCF dapat dipanggil oleh protokol apa pun (seperti http, tcp, dll.) Dan semua jenis transportasi.

Kedua, layanan web ASMX tidak fleksibel. Namun, Layanan WCF fleksibel. Jika Anda membuat versi layanan yang baru maka Anda hanya perlu mengekspos tujuan baru. Oleh karena itu, layanan gesit dan yang merupakan pendekatan yang sangat praktis melihat tren bisnis saat ini.

Kami mengembangkan WCF sebagai kontrak, antarmuka, operasi, dan kontrak data. Sebagai pengembang, kami lebih fokus pada layanan logika bisnis dan tidak perlu khawatir tentang tumpukan saluran. WCF adalah API pemrograman terpadu untuk segala jenis layanan sehingga kami membuat layanan dan menggunakan informasi konfigurasi untuk mengatur mekanisme komunikasi seperti HTTP / TCP / MSMQ dll

Ahli NET
sumber
11
Mungkin hanya saya, tetapi paragraf # 2 dan # 3 menonjol sebagai BS pemasaran.
Neolisk
@Net Pakar mengatakan, "Jika Anda membuat versi baru dari layanan ini, Anda hanya perlu mengekspos tujuan baru", apa yang ingin Anda katakan?
Mou
@Mou, maksudnya mengekspos yang baru endpointkurasa. Suka<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw
25

Ini adalah pertanyaan yang sangat lama, tetapi saya tidak merasa bahwa manfaat ASMX telah cukup digambarkan. Meskipun tidak terlalu fleksibel, layanan web ASMX sangat mudah digunakan dan dipahami. Meskipun WCF lebih fleksibel, ia juga lebih kompleks untuk berdiri dan mengonfigurasi.

Layanan web ASMX siap untuk berdiri dan menambahkan sebagai referensi layanan web segera setelah Anda menambahkan file. (dengan asumsi proyek Anda dibangun)

Untuk alur kerja pengembangan sederhana create webservice-> run webservice-> add webservice reference, layanan web ASMX memiliki sangat sedikit yang bisa salah, tidak banyak yang bisa Anda salah konfigurasi, dan itulah kekuatannya.

Menanggapi orang-orang yang menyatakan bahwa WCF menggantikan ASMX, saya akan menjawab bahwa WCF perlu menambahkan mode konfigurasi KISS yang disederhanakan untuk sepenuhnya menggantikan ASMX.

Contoh web.config untuk layanan web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Andrew Hoffman
sumber
Saya tidak berpikir WCF membutuhkan lebih banyak konfigurasi untuk pekerjaan yang dapat dilakukan dengan menggunakan asmx layanan web, dan Anda juga dapat menambahkan referensi di sisi klien Anda untuk layanan WCF, WCF jauh lebih kuat daripada asmx, ia dapat melakukan apa asmx tidak dan itu akan sesederhana asmx
Coder1409
9
@ Coder1409 juga pasti lebih banyak konfigurasi, karena beberapa hal perlu dikonfigurasi. Mengikat, dapat ditemukan, dll. Tidak perlu dalam asmx. Kontrak layanan, kontrak operasi, kontrak data, anggota data. Tidak perlu di asmx. Tentu saja hal-hal ini adalah mengapa wcf lebih unggul dan lebih kuat, tetapi untuk menyangkal bahwa itu menambah kompleksitas, tidak jujur. Mencapai untuk mengatakan bahwa tidak ada kerugian.
Andrew Hoffman
7
Pertama kali (kedua, ketiga ...) saya membuat wcf butuh waktu lama untuk mencari tahu konfigurasi yang diperlukan. "Kenapa aku harus melakukan itu?" Saya terus bertanya pada diri sendiri. "Mengapa repot dengan sesuatu yang begitu rumit?" asmx hanya bekerja secara instan. Jadi mengatakan bahwa sesederhana itu tidak benar. Suatu hari saya akan sepenuhnya memahami dan mengubah pandangan saya - sampai hari itu GRRRR !!!
tomjm
1
@tomjm Sekali lagi, coba dengan versi modern dari Visual Studio dan .NET. Antara lain, sistem konfigurasi telah berubah ke pengaturan default lebih banyak. Secara khusus, Anda hampir tidak perlu melakukan lebih dari menentukan URL untuk mendapatkan layanan web sederhana, hanya http, tanpa fitur.
John Saunders
1
@ Tomom Yah itu bagus untuk diketahui. Jujur dulu begitu banyak konfigurasi sehingga masuk akal untuk menggunakan aplikasi manajer konfigurasi WCF. Itu bisa melakukan segalanya! (kecuali bekerja di luar kotak dengan beberapa pengaturan default yang baik) Namun saat ini kami berpikir lebih sederhana tentang layanan WEB. Wcf masih bagus untuk layanan tingkat lanjut, tapi .. mungkin sebagian besar pengembangan layanan adalah pengembangan layanan web, dan sulit untuk mengalahkan webapi2 untuk pengembangan layanan web.
Andrew Hoffman
10

WCF sepenuhnya menggantikan layanan web ASMX. ASMX adalah cara lama untuk melakukan layanan web dan WCF adalah cara saat ini untuk melakukan layanan web. Semua pengembangan layanan web SOAP baru, pada klien atau server, harus dilakukan menggunakan WCF.

John Saunders
sumber
32
Masalahnya adalah, sementara ASMX adalah model yang sederhana (artinya tidak terlalu fleksibel), itu adalah model yang sederhana (artinya mudah digunakan dan dipahami untuk kebutuhan layanan web yang paling umum). WCF menambahkan banyak kompleksitas ekstra. Sementara MS ingin mengganti ASMX dengan WCF, tampaknya ada sedikit perlawanan hingga MSM membuat skenario paling umum sesederhana cara [Webmethod] yang lama.
mattmc3
6
WCF sama sekali tidak rumit. Buat layanan web "hello world" sederhana di keduanya dan lihat berapa banyak kode yang Anda tulis di masing-masing. Jawabannya: tidak banyak baik, dan hanya sedikit lebih banyak di WCF. Dan, BTW, ASMX sudah telah digantikan oleh WCF. Dilakukan kesepakatan.
John Saunders
58
"WCF sama sekali tidak rumit" Ha. Katakan itu dengan cara saya web.config overbloated.
mattmc3
26
(Bukan downvoter, tapi saya akan memberi tahu Anda alasannya) - karena "ini baru dan sudah lama" bukan perbedaan yang signifikan yang harus diperhatikan oleh siapa pun. Kami tidak memilih alat hanya berdasarkan pada usia berapa - palu itu benar-benar tua, tetapi masih merupakan alat terbaik untuk menggerakkan kuku hampir sepanjang waktu. Jadi, Anda memberikan jawaban yang valid, hanya saja tidak membantu - seperti lelucon "Anda berada di pesawat" yang lama.
Jasmine
5
turun memilih - tidak ada referensi. Bagaimana Anda mengetahui informasi ini? Apakah itu pendapat? Apakah Anda bekerja untuk microsoft? Tambahkan referensi dan saya akan memilih.
tomjm
7

Ada banyak pembicaraan yang terjadi tentang kesederhanaan layanan web asmx melalui WCF. Izinkan saya mengklarifikasi beberapa poin di sini.

  • Memang benar bahwa pengembang layanan web pemula akan memulai dengan mudah di layanan web asmx. Visual Studio melakukan semua pekerjaan untuk mereka dan dengan mudah membuat proyek Hello World.
  • Tetapi jika Anda dapat mempelajari WCF (yang tentunya tidak akan memakan banyak waktu) maka Anda dapat melihat bahwa WCF juga cukup sederhana, dan Anda dapat melanjutkan dengan mudah.
  • Penting untuk diingat bahwa kompleksitas ini di WCF sebenarnya dikaitkan dengan fitur-fitur indah yang dibawanya. Ada pengalamatan, binding, kontrak dan titik akhir, layanan & klien semua yang disebutkan dalam file konfigurasi. Keindahan adalah logika bisnis Anda yang dipisahkan dan dikelola dengan aman. Besok jika Anda perlu mengubah ikatan dari basicHttpBinding ke netTcpBinding Anda dapat dengan mudah membuat pengikatan dalam file konfigurasi dan menggunakannya. Jadi semua perubahan yang berhubungan dengan klien, saluran komunikasi, binding dll harus dilakukan dalam konfigurasi meninggalkan logika bisnis aman & utuh, yang masuk akal sangat baik.
  • "Layanan web" WCF adalah bagian dari spektrum komunikasi jarak jauh yang jauh lebih luas yang diaktifkan melalui WCF. Anda akan mendapatkan tingkat fleksibilitas dan portabilitas yang jauh lebih tinggi dalam melakukan berbagai hal di WCF daripada melalui ASMX tradisional karena WCF dirancang, dari bawah ke atas, untuk merangkum semua infrastruktur pemrograman terdistribusi berbeda yang ditawarkan oleh Microsoft. Sebuah titik akhir dalam WCF dapat dikomunikasikan dengan mudah melalui SOAP / XML seperti halnya melalui TCP / biner dan untuk mengubah media ini hanyalah sebuah file konfigurasi file mod. Secara teori, ini mengurangi jumlah kode baru yang diperlukan ketika porting atau mengubah kebutuhan bisnis, target, dll.
  • Layanan Web hanya dapat diakses melalui HTTP & berfungsi di lingkungan tanpa negara, di mana WCF fleksibel karena layanannya dapat di-host di berbagai jenis aplikasi. Anda dapat meng-host layanan WCF Anda di Konsol, Layanan Windows, IIS & WS, yang sekali lagi merupakan cara berbeda untuk membuat proyek baru di Visual Studio.
  • ASMX lebih tua dari WCF, dan apa pun yang bisa dilakukan ASMX bisa WCF (dan banyak lagi). Pada dasarnya Anda dapat melihat WCF sebagai mencoba untuk secara logis mengelompokkan semua cara berbeda untuk membuat dua aplikasi berkomunikasi di dunia Microsoft; ASMX hanyalah salah satu dari banyak cara ini dan sekarang dikelompokkan di bawah payung kemampuan WCF.
  • Anda akan selalu suka menggunakan Visual Studio untuk NET 4.0 atau 4.5 karena membuat hidup lebih mudah saat membuat layanan WCF.
  • Perbedaan utama adalah bahwa Layanan Web Menggunakan XmlSerializer. Tetapi WCF Menggunakan DataContractSerializer yang lebih baik dalam Kinerja dibandingkan dengan XmlSerializer. Itu sebabnya WCF berkinerja lebih baik daripada rekan-rekan teknologi komunikasi lainnya dari .NET seperti asmx, .NET remoting dll.

Tidak lupa bahwa saya adalah salah satu dari orang-orang yang lebih menyukai layanan asmx daripada WCF, tetapi pada waktu itu saya tidak begitu menyadari layanan WCF dan kemampuannya. Saya takut dengan konfigurasi WCF. Tetapi saya berani dan dan mencoba menulis beberapa layanan WCF saya sendiri, dan ketika saya belajar lebih banyak tentang WCF, sekarang saya tidak memiliki hambatan tentang WCF dan saya merekomendasikan mereka kepada siapa saja & semua orang. Selamat coding !!!

Sagnik Majumder
sumber