ความแตกต่างระหว่างการอ้างอิงเว็บและการอ้างอิงบริการ


132

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


ดูที่ Channel Factories ด้วย - stackoverflow.com/questions/1698275/…
Manish Jain

1
อืมอาจจะเลือกคำตอบ? คำถามที่ดีโดยวิธี
Daniël Tulp

คำตอบ:


102

คำตอบระดับต่ำที่นี่คือการอ้างอิงเว็บจะสร้างคลาสพร็อกซีไคลเอนต์ที่อนุญาตให้รหัสของคุณพูดคุยกับบริการเว็บที่อธิบายผ่าน WSDL และสื่อสารผ่าน SOAP หรือ HTTP GET (ผู้โพสต์อื่นระบุว่าเป็น ASMX เท่านั้น แต่ การอ้างอิงเว็บสามารถพูดคุยกับ Web Services ที่ใช้ Java หรือ Python หรือ Ruby ได้ตราบใดที่พวกเขาทั้งหมดพูดคุย WSDL และเป็นไปตามมาตรฐานการทำงานร่วมกันของ WS-I)

การอ้างอิงบริการจะสร้างคลาสพร็อกซีไคลเอนต์ที่สื่อสารกับบริการที่ใช้ WCF: ไม่ว่าบริการ WCF นั้นจะเป็นบริการบนเว็บหรือไม่ก็ตาม


1
+1 เพื่อเพิ่มว่าบริการเว็บมาตรฐานใด ๆ ที่มี WSDL ที่มีรูปแบบถูกต้องตรงตามเกณฑ์
sidney.andrews

ฉันสามารถเพิ่มการอ้างอิงบริการไปยังบริการเว็บที่ใช้ java ได้หรือไม่ มันจะยังสมเหตุสมผลไหม? เนื่องจาก Java ไม่รู้อะไรเกี่ยวกับ
wcf

ใช่คุณสามารถเพิ่มการอ้างอิงบริการไปยังบริการเว็บ java และอื่น ๆ ได้หากมี wsdl การอ้างอิงบริการจะถือว่าเป็นการอ้างอิงเว็บ "คลาสสิก" ในกรณีนี้
Brady Moritz

+1 สำหรับระบุว่า Web Service สามารถใช้บริการเว็บที่อธิบาย WSDL ได้เช่นเดียวกับ ASMX ตามความเป็นจริงฉันมีชั้นธุรกิจที่มีการอ้างอิงเว็บและการอ้างอิงบริการ การอ้างอิงเว็บใช้บริการเว็บ WSDL ในขณะที่การอ้างอิงบริการใช้บริการ ASMX
Jagd

67

การอ้างอิงทางเว็บช่วยให้คุณสามารถสื่อสารกับบริการใด ๆ ที่ใช้เทคโนโลยีใด ๆ ที่ใช้ WS-I Basic Profile 1.1 และแสดงข้อมูลเมตาที่เกี่ยวข้องเป็น WSDL ภายในจะใช้สแตกการสื่อสาร ASMX ที่ฝั่งไคลเอ็นต์

การอ้างอิงบริการช่วยให้คุณสามารถสื่อสารกับบริการใด ๆ โดยใช้เทคโนโลยีใด ๆ ที่ใช้โปรโตคอลจำนวนมากที่ WCF รองรับ (รวมถึง แต่ไม่ จำกัด เฉพาะ WS-I Basic Profile) ภายในจะใช้สแต็กการสื่อสาร WCF ที่ฝั่งไคลเอ็นต์

โปรดทราบว่าคำจำกัดความทั้งสองนี้ค่อนข้างกว้างและทั้งสองรวมถึงบริการที่ไม่ได้เขียนใน. NET

เป็นไปได้อย่างสมบูรณ์ (แม้ว่าจะไม่แนะนำ) ในการเพิ่มการอ้างอิงเว็บที่ชี้ไปยังบริการ WCF ตราบใดที่จุดสิ้นสุดของ WCF ใช้basicHttpBindingหรือตัวแปรแบบกำหนดเองที่เข้ากันได้

นอกจากนี้ยังสามารถเพิ่มการอ้างอิงบริการที่ชี้ไปยังบริการ ASMX เมื่อเขียนโค้ดใหม่คุณควรใช้ Service Reference เสมอเพราะมีความยืดหยุ่นและสามารถพิสูจน์ได้ในอนาคต


1
ใครช่วยแนะนำวิธีใช้บริการผ่าน Service Reference ให้ฉันหน่อยได้ไหม ด้วยการอ้างอิงเว็บฉันมักจะสามารถค้นหาฟังก์ชันหลักในวัตถุบริการบางประเภทได้ ด้วยการอ้างอิงบริการไม่มากนัก ตัวอย่างเช่นฉันกำลังพยายามใช้บริการอัตราของ FedEx เพื่อรับราคาสำหรับตัวเลือกการจัดส่งต่างๆของ FedEx ฉันรู้ว่ามีสาย getRates () อยู่ที่นั่นที่ไหนสักแห่ง แต่ฉันหาไม่พบจากข้อมูลอ้างอิงบริการ
Ben Mills

@ BenMills: มองหาชั้นเรียนที่มีClientคำต่อท้าย
Christian Hayter

17

การอ้างอิงบริการเป็นอินเทอร์เฟซที่ใหม่กว่าสำหรับการเพิ่มการอ้างอิงไปยังบริการ WCF ทุกรูปแบบ (อาจไม่ใช่บริการบนเว็บ) ในขณะที่การอ้างอิงเว็บเกี่ยวข้องกับการอ้างอิงเว็บ ASMX โดยเฉพาะ

คุณสามารถเข้าถึงการอ้างอิงเว็บผ่านทางตัวเลือกขั้นสูงในการอ้างอิงบริการเพิ่ม (ถ้าฉันจำได้ถูกต้อง)

ฉันจะใช้การอ้างอิงบริการเพราะอย่างที่ฉันเข้าใจกลไกนี้เป็นกลไกที่ใหม่กว่าของทั้งสอง


8
เพิ่มการอ้างอิงบริการ -> ขั้นสูง -> เพิ่มการอ้างอิงเว็บ ... ไม่มีอะไรเหมือนกับโซลูชันที่ไม่ใช้งานง่าย
Jagd

7

การอ้างอิงบริการจัดการกับปลายทางและการเชื่อมโยงซึ่งสามารถกำหนดค่าได้อย่างสมบูรณ์ ช่วยให้คุณชี้พร็อกซีไคลเอนต์ของคุณไปที่ WCF ผ่านโปรโตคอลการขนส่งใด ๆ (HTTP, TCP, หน่วยความจำที่ใช้ร่วมกัน ฯลฯ )

ได้รับการออกแบบมาเพื่อทำงานร่วมกับ WCF

หากคุณใช้ WebProxy คุณจะค่อนข้างผูกมัดตัวเองกับการใช้ WCF ผ่าน HTTP


5

อีกประเด็นหนึ่งที่ต้องพิจารณาคือ UI ใหม่สำหรับอินเทอร์เฟซบริการจะช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการสร้างคลาสพร็อกซีของคุณ ตัวอย่างเช่นจะช่วยให้คุณสามารถแมปสัญญาข้อมูลกับ dll ที่มีอยู่ได้หากตรงกัน (จริงๆแล้วนี่เป็นลักษณะการทำงานเริ่มต้น)

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