อะไรคือความแตกต่างระหว่าง WCF และ ASMX เว็บเซอร์วิส


375

ฉันสับสนโดยสิ้นเชิงระหว่าง WCF และ ASMX เว็บเซอร์วิส ฉันใช้บริการเว็บจำนวนมากในระยะก่อนหน้านี้และตอนนี้มีสิ่งใหม่ที่เรียกว่า WCF ฉันยังสามารถสร้าง WCF ที่ทำหน้าที่เป็นบริการเว็บ ฉันคิดว่าจะมีสิ่งต่าง ๆ ใน WCF มากขึ้น

อะไรคือความแตกต่างระหว่าง WCF และบริการบนเว็บ? เมื่อใดควรใช้แต่ละคน


5
ไม่มีวิธีนี้เป็นคำถามที่แนะนำ ASMX หรือ WCF ไม่เป็นผลิตภัณฑ์ นี่คือการทำซ้ำสองครั้งของบริการเว็บใน Microsoft stack คำถามคืออะไรคือความแตกต่างและมันคุ้มค่าในขณะที่ฉันเรียนรู้ใหม่หรือไม่ นี่ไม่ใช่สิ่งเดียวกับ "ฉันควรใช้ตัวควบคุม Telerik หรือ Infragistics
จอห์นแซนเดอร์

คำตอบ:


391

Keith Elder เปรียบเทียบASMX กับ WCFอย่างชัดเจน ลองดูสิ

การเปรียบเทียบ ASMX และ WCF อื่น ๆ สามารถพบได้ที่นี่ - ฉันไม่เห็นด้วย 100% กับทุกประเด็นที่มี แต่มันอาจทำให้คุณมีความคิด

WCF นั้นโดยทั่วไปคือ "ASMX บน stereoids" - อาจเป็นไปได้ทั้งหมดที่ ASMX สามารถทำได้ - บวกอีกมากมาย! .

ASMX คือ:

  • ง่ายและง่ายต่อการเขียนและกำหนดค่า
  • ใช้ได้เฉพาะใน IIS
  • callable จาก HTTP เท่านั้น

WCF สามารถ:

  • โฮสต์ใน IIS, Windows Service, แอปพลิเคชั่น Winforms, แอพคอนโซล - คุณมีอิสระอย่างเต็มที่
  • ใช้กับ HTTP (REST และ SOAP), TCP / IP, MSMQ และโปรโตคอลอื่น ๆ อีกมากมาย

ในระยะสั้น: WCF มาที่นี่เพื่อแทนที่ ASMX อย่างเต็มที่

ตรวจสอบที่ศูนย์ WCF นักพัฒนาใน MSDN

อัปเดต:ลิงก์ดูเหมือนว่าจะตาย - ลองสิ่งนี้: Windows Communication Foundation คืออะไร


15
ด้วย visual studio 2010 .net 4.0 WCF นั้นง่ายต่อการเขียนเหมือน ASMX จึงไม่มีข้อแก้ตัวในการเขียน ASMX อีกต่อไป WCF นั้นเร็วกว่ายืดหยุ่นกว่าและปลอดภัยกว่า ASMX เป็นมรดกและไม่มีใครควรเขียนช่วงเวลา
Tom Stickel

13
"นักพัฒนาส่วนใหญ่สันนิษฐานว่า ASMX ต้องการ IIS อย่างไม่ถูกต้องอย่างไรก็ตามเป็นกรณีการใช้งานเพียงอย่างเดียวที่พวกเขาเคยเห็นมา แต่ความจริงก็คือ ASMX นั้นไม่มีการพึ่งพาทางเทคนิคใด ๆ กับ IIS แต่อย่างใด" msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@MrNick: ถูกต้อง ไม่ใช่ IIS แต่ยังเป็น HTTP เท่านั้นและไปเปรียบเทียบรหัสสำหรับการโฮสต์ ASMX กับรหัสสำหรับการโฮสต์บริการ WCF
John Saunders

1
น่าเสียดายที่ลิงค์keithelder.net/2008/10/17/wcf-vs-asmx-webservicesเสีย
Robert

2
@codemonkeyliketab: การตอบสนองมากกว่า 6 ปี - เบาในยุคอินเทอร์เน็ต! ฉันพยายามค้นหาการแทนที่สำหรับ WCF Developer Center - ดูการอัปเดตของฉัน
marc_s

37

บริการเว็บ ASMX สามารถเรียกใช้โดย HTTP (เว็บเซอร์ดั้งเดิมที่มี. asmx) เท่านั้น ในขณะที่บริการ WCF หรือส่วนประกอบ WCF สามารถเรียกใช้โดยโปรโตคอลใด ๆ (เช่น http, tcp ฯลฯ ) และประเภทการขนส่งใด ๆ

ประการที่สองบริการเว็บ ASMX ไม่ยืดหยุ่น อย่างไรก็ตามบริการ WCF นั้นมีความยืดหยุ่น หากคุณสร้างบริการรุ่นใหม่คุณจำเป็นต้องเปิดเผยจุดสิ้นสุดใหม่ ดังนั้นการบริการจึงมีความคล่องตัวและเป็นแนวทางที่ใช้งานได้จริงในการมองแนวโน้มธุรกิจในปัจจุบัน

เราพัฒนา WCF เป็นสัญญาส่วนต่อประสานการปฏิบัติงานและสัญญาข้อมูล ในฐานะนักพัฒนาเราให้ความสำคัญกับบริการทางธุรกิจและไม่จำเป็นต้องกังวลเกี่ยวกับช่องสัญญาณ WCF เป็น API การเขียนโปรแกรมแบบรวมสำหรับบริการทุกประเภทดังนั้นเราจึงสร้างบริการและใช้ข้อมูลการกำหนดค่าเพื่อตั้งค่ากลไกการสื่อสารเช่น HTTP / TCP / MSMQ เป็นต้น


11
อาจเป็นเพียงฉัน แต่ย่อหน้า # 2 และ # 3 โดดเด่นในฐานะ BS ด้านการตลาด
Neolisk

@Net Experts u พูดว่า "ถ้าคุณสร้างบริการรุ่นใหม่คุณต้องเปิดท้ายใหม่" คุณพยายามจะพูดอะไร?
Mou

@ คุณเขาหมายถึงการเปิดเผยใหม่endpointฉันเดา ชอบ<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw

25

นี่เป็นคำถามที่เก่ามาก แต่ฉันไม่รู้สึกว่าประโยชน์ของ ASMX นั้นได้รับการถ่ายทอดอย่างเป็นธรรม ในขณะที่ไม่ยืดหยุ่นอย่างมากบริการเว็บ ASMX นั้นใช้งานและเข้าใจได้ง่าย ในขณะที่ WCF มีความยืดหยุ่นมากขึ้นก็ยังมีความซับซ้อนมากขึ้นในการยืนขึ้นและกำหนดค่า

บริการเว็บ ASMX พร้อมที่จะยืนขึ้นและเพิ่มเป็นการอ้างอิงเว็บเซอร์ทันทีที่คุณเพิ่มไฟล์ (สมมติว่าโครงการของคุณสร้าง)

สำหรับเวิร์กโฟลว์การพัฒนาที่เรียบง่ายของ create webservice-> run webservice-> add webservice referenceเว็บเซอร์วิส ASMX มีน้อยมากที่สามารถผิดพลาดได้ไม่มากที่คุณสามารถกำหนดค่าผิดและนั่นคือความแข็งแกร่ง

ในการตอบสนองต่อผู้ที่ยืนยันว่า WCF แทนที่ ASMX ฉันจะตอบว่า WCF จะต้องเพิ่มโหมดการกำหนดค่า KISS ที่มีความคล่องตัวเพื่อแทนที่ ASMX อย่างสมบูรณ์

ตัวอย่าง web.config สำหรับ ASMX webservice:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

ฉันไม่คิดว่า WCF ต้องการการกำหนดค่าเพิ่มเติมสำหรับงานที่สามารถทำได้โดยใช้ asmx webservices และคุณสามารถเพิ่มการอ้างอิงในฝั่งไคลเอ็นต์ของคุณสำหรับบริการ WCF ได้ WCF นั้นมีประสิทธิภาพมากกว่า asmx มันสามารถทำสิ่งที่ asmx ได้ ทำและมันจะง่ายเหมือน asmx
Coder1409

9
@ Coder1409 ดีมันแน่นอนการกำหนดค่ามากขึ้นเพราะบางสิ่งจำเป็นต้องกำหนดค่า การผูกการค้นพบ ฯลฯ ไม่จำเป็นใน asmx สัญญาบริการสัญญาการดำเนินงานสัญญาข้อมูลสมาชิกข้อมูล ไม่จำเป็นใน asmx แน่นอนว่าทำไม wcf ถึงเหนือกว่าและมีประสิทธิภาพมากกว่า แต่การปฏิเสธว่ามันเพิ่มความซับซ้อนเพียงแค่ไม่ซื่อสัตย์ ถึงจะบอกว่าไม่มีข้อเสีย
Andrew Hoffman

7
ครั้งแรก (ที่สองที่สาม ... ) เวลาที่ฉันสร้าง wcf มันเอาฉันทุกวัยที่จะคิดออกการกำหนดค่าที่จำเป็น "ทำไมฉันต้องทำอย่างนั้น?" ฉันถามตัวเองต่อไปเรื่อย ๆ ทำไมต้องกังวลกับบางสิ่งที่ซับซ้อนเช่นนี้ " asmx ทำงานได้ทันที ดังนั้นการบอกว่ามันเรียบง่ายไม่จริง อยู่มาวันหนึ่งฉันจะเข้าใจและเปลี่ยนมุมมองของฉัน - จนถึงวันนั้น GRRRR !!!
tomjm

1
@tomjm ลองอีกครั้งกับ Visual Studio และ. NET เหนือสิ่งอื่นใดระบบการกำหนดค่าได้เปลี่ยนเป็นการตั้งค่าเริ่มต้นเพิ่มเติม โดยเฉพาะอย่างยิ่งคุณจะต้องทำมากกว่าระบุ URL เพื่อรับบริการเว็บอย่างง่าย http เท่านั้นโดยไม่มีคุณสมบัติ
John Saunders

1
@tomjm ดีที่รู้ จริง ๆ แล้วมันเคยเป็น config มากจนสมเหตุสมผลที่จะใช้แอพ wcf config manager มันสามารถทำทุกอย่างได้! (ยกเว้นการทำงานนอกกรอบด้วยการตั้งค่าเริ่มต้นที่ดี)อย่างไรก็ตามทุกวันนี้เราคิดถึงบริการเว็บอย่างง่ายขึ้น WCF ยังคงยอดเยี่ยมสำหรับบริการขั้นสูง แต่ .. อาจเป็นไปได้ว่าการพัฒนาบริการส่วนใหญ่คือการพัฒนาเว็บเซอร์วิส
Andrew Hoffman

10

WCF แทนที่ ASMX เว็บเซอร์วิสอย่างสมบูรณ์ ASMX เป็นวิธีการทำเว็บเซอร์วิสแบบเก่าและ WCF เป็นวิธีการทำเว็บเซอร์วิสในปัจจุบัน การพัฒนาบริการเว็บ SOAP ใหม่ทั้งหมดบนไคลเอ็นต์หรือเซิร์ฟเวอร์ควรทำโดยใช้ WCF


32
ปัญหาคือในขณะที่ ASMX เป็นรูปแบบเรียบง่าย (หมายถึงไม่ยืดหยุ่นมาก) มันเป็นรูปแบบที่เรียบง่าย (หมายถึงใช้งานง่ายและเข้าใจสำหรับความต้องการบริการเว็บที่พบบ่อยที่สุด) WCF เพิ่มความซับซ้อนมากขึ้นเป็นพิเศษ ในขณะที่ MS ต้องการแทนที่ ASMX ด้วย WCF ดูเหมือนว่าจะมีความต้านทานเล็กน้อยจนกว่า MS จะสร้างสถานการณ์ที่พบบ่อยที่สุดให้ง่ายเหมือนวิธี [Webmethod] แบบเก่า
mattmc3

6
WCF ไม่ซับซ้อนเลย สร้างบริการเว็บ "hello world" ที่เรียบง่ายทั้งในและดูว่าคุณเขียนโค้ดแต่ละรายการเท่าไหร่ คำตอบ: ไม่มากในทั้งสองและมากกว่า WCF เพียงเล็กน้อยเท่านั้น และ BTW, ASMX แล้วได้ถูกแทนที่ด้วย WCF เสร็จสิ้นการจัดการ
John Saunders

58
"WCF ไม่ซับซ้อนเลย" ฮา บอกต่อไปทาง web overconfated web.config
mattmc3

26
(ไม่ใช่ downvoter แต่ฉันจะบอกคุณว่าทำไม) - เพราะ "นี่ใหม่และเก่าแล้ว" ไม่แตกต่างกันอย่างมีนัยสำคัญที่ทุกคนควรใส่ใจ เราไม่ได้เลือกเครื่องมือตามอายุของมัน - ค้อนนั้นเก่าจริง ๆ แต่มันก็ยังเป็นเครื่องมือที่ดีที่สุดสำหรับการขับเล็บเกือบตลอดเวลา ดังนั้นคุณให้คำตอบที่ถูกต้องมันไม่ได้มีประโยชน์เช่นเดียวกับเรื่องตลก "คุณอยู่ในเครื่องบิน"
จัสมิ

5
โหวตลง - ไม่มีการอ้างอิง คุณรู้ข้อมูลนี้ได้อย่างไร มันคือความคิดเห็น? คุณทำงานกับไมโครซอฟท์หรือไม่? เพิ่มการอ้างอิงและฉันจะเพิ่มคะแนน
tomjm

7

มีการพูดคุยกันมากมายเกี่ยวกับความเรียบง่ายของบริการเว็บ asmx ผ่าน WCF ขอผมอธิบายบางประเด็นที่นี่

  • ความจริงที่นักพัฒนาเว็บเซอร์วิสสามเณรจะเริ่มต้นได้ง่ายในเว็บเซอร์วิส asmx Visual Studio ทำงานเพื่อพวกเขาทั้งหมดและพร้อมสร้างโครงการ Hello World
  • แต่ถ้าคุณสามารถเรียนรู้ WCF (ซึ่งนอกหลักสูตรจะไม่ใช้เวลามาก) คุณจะได้เห็นว่า WCF นั้นค่อนข้างง่ายและคุณสามารถไปข้างหน้าได้อย่างง่ายดาย
  • มันสำคัญที่ต้องจำไว้ว่าความซับซ้อนเหล่านี้ใน WCF นั้นเกิดจากคุณสมบัติที่สวยงามที่มันนำมาด้วย มีการระบุที่อยู่การผูกมัดสัญญาและปลายทางบริการและลูกค้าทั้งหมดที่กล่าวถึงในไฟล์กำหนดค่า ความงามคือตรรกะทางธุรกิจของคุณที่ถูกแยกและรักษาไว้อย่างปลอดภัย พรุ่งนี้ถ้าคุณต้องการเปลี่ยนการผูกจากbasicHttpBindingเป็นnetTcpBindingคุณสามารถสร้างการผูกในไฟล์ปรับแต่งและใช้งานได้ ดังนั้นการเปลี่ยนแปลงทั้งหมดที่เกี่ยวข้องกับลูกค้าช่องทางการสื่อสารการผูก ฯลฯ จะต้องทำในการกำหนดค่าออกจากตรรกะทางธุรกิจที่ปลอดภัย & ไม่บุบสลายซึ่งทำให้รู้สึกดีจริง
  • WCF "บริการเว็บ" เป็นส่วนหนึ่งของการสื่อสารระยะไกลที่เปิดกว้างผ่าน WCF คุณจะได้รับความยืดหยุ่นและพกพาได้สูงขึ้นใน WCF มากกว่า ASMX แบบดั้งเดิมเนื่องจาก WCF ได้รับการออกแบบตั้งแต่ต้นจนจบเพื่อสรุปโครงสร้างการเขียนโปรแกรมแบบกระจายที่นำเสนอทั้งหมดโดย Microsoft จุดปลายใน WCF สามารถสื่อสารกับ SOAP / XML ได้อย่างง่ายดายเช่นเดียวกับ TCP / ไบนารีและการเปลี่ยนสื่อนี้เป็นเพียงไฟล์ปรับแต่งการตั้งค่า ในทางทฤษฎีสิ่งนี้จะลดจำนวนรหัสใหม่ที่จำเป็นเมื่อย้ายหรือเปลี่ยนแปลงความต้องการทางธุรกิจเป้าหมาย ฯลฯ
  • บริการบนเว็บสามารถเข้าถึงได้ผ่าน HTTP เท่านั้นและทำงานได้ในสภาพแวดล้อมไร้สัญชาติโดยที่ WCF นั้นมีความยืดหยุ่นเนื่องจากบริการสามารถโฮสต์ในแอปพลิเคชันประเภทต่างๆ คุณสามารถโฮสต์บริการ WCF ของคุณใน Console, Windows Services, IIS & WAS ซึ่งเป็นวิธีที่แตกต่างกันในการสร้างโครงการใหม่ใน Visual Studio
  • ASMX นั้นเก่ากว่า WCF และอะไรก็ตามที่ ASMX สามารถทำได้ WCF (และอื่น ๆ ) โดยพื้นฐานแล้วคุณจะเห็น WCF ว่าพยายามจัดกลุ่มตามหลักเหตุผลร่วมกันในการรวบรวมแอพทั้งสองเพื่อสื่อสารในโลกของ Microsoft ASMX เป็นเพียงหนึ่งในหลาย ๆ วิธีเหล่านี้และขณะนี้ได้รับการจัดกลุ่มภายใต้ความสามารถของ WCF
  • คุณมักจะต้องการใช้ Visual Studio สำหรับ NET 4.0 หรือ 4.5 เพราะทำให้ชีวิตง่ายขึ้นในขณะที่สร้างบริการ WCF
  • ความแตกต่างที่สำคัญคือเว็บเซอร์วิสใช้ XmlSerializer แต่ WCF ใช้ DataContractSerializer ซึ่งดีกว่าในประสิทธิภาพเมื่อเทียบกับ XmlSerializer นั่นเป็นสาเหตุที่ WCF ทำงานได้ดีกว่าเทคโนโลยีการสื่อสารอื่น ๆ จาก. NET เช่น asmx, .NET remoting เป็นต้น

อย่าลืมว่าฉันเป็นหนึ่งในคนที่ชอบบริการ asmx มากกว่า WCF แต่ครั้งนั้นฉันไม่ได้ตระหนักถึงบริการ WCF และความสามารถของมัน ฉันกลัวการกำหนดค่า WCF แต่ฉันกล้าและพยายามเขียนบริการ WCF ของตัวเองและเมื่อฉันเรียนรู้เกี่ยวกับ WCF มากขึ้นตอนนี้ฉันไม่มีข้อห้ามเกี่ยวกับ WCF และฉันแนะนำพวกเขาให้กับทุกคน & ทุกคน การเข้ารหัสมีความสุข !!!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.