การอ้างอิงเว็บเทียบกับการอ้างอิงบริการ


110

ฉันเพิ่งชนกำแพงอิฐขนาดใหญ่ด้วย Paypal ฉันได้สร้างโปรเจ็กต์ C # ปกติเพื่อสร้างคลาส wrapper โดยใช้ WSDL

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

ดังนั้นฉันจึงมองหาอินเทอร์เฟซที่เหมาะสมในรายการคลาสพร็อกซีนี้เพื่อใช้เป็นบริการ (SoapBinding) และPayPalAPIAASoapBindingไม่ได้อยู่ที่นั่นฉันยังคงบอกจุดติดต่อ PayPal ของเรา

ฉันเห็นเฉพาะอินเทอร์เฟซ 2 รายการต่อไปนี้ที่ดูเหมือนว่าฉันต้องใช้อะไรเนื่องจากฉันไม่เห็นสิ่งPayPalAPIAASoapBindingที่คุณสามารถเห็นได้ในการอ้างอิงบริการอ้างอิงจากเว็บ:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

ฉันก็เลยคิดออกว่าฉันคงสร้าง Service Reference กับ Web Reference ซึ่ง Web Reference เป็นตัวเลือกในโปรเจ็กต์เว็บ แต่ฉันไม่ต้องการการอ้างอิงบริการของฉันควบคู่ไปกับโครงการเว็บอย่างแน่นหนา นั่นคือเหตุผลที่ฉันสร้างโครงการ C #

แล้วการอ้างอิงบริการกับการอ้างอิงเว็บคืออะไร? และฉันควรจะแยกสิ่งนี้ออกเป็นโปรเจ็กต์ anther ได้อย่างไรหาก Service Reference กำลังจะโยนห่วงและมอบชุดอินเทอร์เฟซที่แตกต่างจาก Web Reference ให้ฉัน

นอกจากนี้เพื่อให้สิ่งต่างๆสับสนมากขึ้น VS 2008 มีโครงการ Web Service Application

แล้วฉันจะใช้อะไร? เรากำลังใช้กรอบ NET 3.5 และเราไม่พร้อมที่จะย้ายไป WCF ดังนั้นฉันยังสามารถใช้ Service Reference ใหม่ได้แม้ว่าจะไม่ได้ใช้ WCF หรืออะไรก็ตาม หากคุณกำลังใช้. NET 3.5 และยังไม่ได้ใช้ WCF และคุณยังต้องการทำบริการเว็บพื้นฐานคุณยังคงใช้เส้นทางอ้างอิงบริการและไม่ได้ใช้กรอบงาน WCF หรือไม่? ความหมายสามารถใช้เช่นการอ้างอิงเว็บ. NET 2.0 ได้หรือไม่เพียงแค่ว่าคุณจะได้ WSDL รุ่นที่แตกต่างไปจากเดิมอย่างสิ้นเชิง



2
8 ปีต่อมาและยังคงมีความเกี่ยวข้อง
Mike Devenney

คำตอบ:


213

Add Web Referenceเป็นเทคโนโลยี ASP.NET webservices (ASMX) แบบเก่าที่เลิกใช้แล้ว (โดยใช้ XmlSerializer สำหรับข้อมูลของคุณเท่านั้น) หากคุณทำเช่นนี้คุณจะได้รับไคลเอนต์ ASMX สำหรับบริการเว็บ ASMX คุณสามารถทำได้ในทุกโปรเจ็กต์ (Web App, Web Site, Console App, Winforms - คุณตั้งชื่อ)

Add Service Referenceเป็นวิธีการใหม่ในการเพิ่มการอ้างอิงบริการ WCF ซึ่งให้รูปแบบบริการขั้นสูงและยืดหยุ่นมากกว่า ASMX แบบเดิม ๆ

เนื่องจากคุณยังไม่พร้อมที่จะย้ายไปที่ WCF คุณยังสามารถเพิ่มการอ้างอิงเว็บแบบเก่าได้หากคุณต้องการจริงๆ: เมื่อคุณทำ "เพิ่มการอ้างอิงบริการ" ในกล่องโต้ตอบที่ปรากฏขึ้นให้คลิกที่ [ขั้นสูง ] ที่มุมซ้ายของปุ่ม:

ข้อความแสดงแทน

และในกล่องโต้ตอบถัดไปที่ปรากฏขึ้นให้เลือกปุ่ม [เพิ่มการอ้างอิงเว็บ] ที่ด้านล่าง


6
มันโง่แค่ไหนที่ MS จะซ่อนสิ่งนั้นไว้ในกล่องโต้ตอบ WCF! ไม่สมเหตุสมผลกับตำแหน่งที่นี่เลย
PositiveGuy

9
@coffeeaddict: ดีฉันคิดว่า MS พยายามที่จะโน้มน้าวคุณอย่างละเอียดในการใช้ WCF โดยค่าเริ่มต้น - และ ASMX แบบเก่าเท่านั้นหากคุณตั้งใจจริง :-)
marc_s

27
หากคุณใช้ Alt + PrtScn คุณสามารถถ่ายภาพเพียงแค่หน้าต่างที่ใช้งานอยู่ในปัจจุบันวิธีนี้คุณจะไม่ต้องครอบตัดสิ่งที่คุณต้องการแสดงด้วยตนเอง: o)
เออร์เนสต์

จะต้องใช้. NET 2.0 บนคอมพิวเตอร์ด้วยหรือไม่? หรือ. NET 4.0 จะสามารถจัดการกับเทคโนโลยี "Web Reference" ที่ใช้. NET 2.0 ได้หรือไม่? ฉันต้องการทราบว่าเนื่องจากฉันกำลังปรับใช้บริการเว็บเซิร์ฟเวอร์ SOAP เป็น "การอ้างอิงเว็บ" ในแอปพลิเคชัน. NET 4.0
ผู้ใช้คอมพิวเตอร์

1
@sparkyShorts: ใช่
marc_s

9

ถ้าฉันเข้าใจคำถามของคุณถูกต้อง:

หากต้องการเพิ่มการอ้างอิงบริการเว็บ. net 2.0 แทนการอ้างอิงบริการ WCF ให้คลิกขวาที่โครงการของคุณแล้วคลิก 'เพิ่มการอ้างอิงบริการ'

จากนั้นคลิก "ขั้นสูง .. " ที่ด้านล่างซ้ายของกล่องโต้ตอบ

จากนั้นคลิก "เพิ่มการอ้างอิงเว็บ .. " ที่ด้านล่างซ้ายของกล่องโต้ตอบถัดไป

ตอนนี้คุณสามารถเพิ่มการอ้างอิงเว็บ SOAP ตามที่คุณต้องการได้แล้ว


จะต้องใช้. NET 2.0 บนคอมพิวเตอร์ด้วยหรือไม่? หรือ. NET 4.0 จะสามารถจัดการกับเทคโนโลยี "Web Reference" ที่ใช้. NET 2.0 ได้หรือไม่? ฉันต้องการทราบว่าเนื่องจากฉันกำลังปรับใช้บริการเว็บเซิร์ฟเวอร์ SOAP เป็น "การอ้างอิงเว็บ" ในแอปพลิเคชัน. NET 4.0
ผู้ใช้คอมพิวเตอร์

4

การเพิ่มการอ้างอิงบริการช่วยให้คุณสามารถสร้างไคลเอนต์ WCF ซึ่งสามารถใช้เพื่อพูดคุยกับบริการเว็บทั่วไปหากคุณใช้การผูกที่เหมาะสม การเพิ่มการอ้างอิงเว็บจะช่วยให้คุณสร้างเฉพาะเว็บเซอร์วิส (เช่น SOAP) การอ้างอิง

หากคุณแน่ใจว่าคุณยังไม่พร้อมสำหรับ WCF (ไม่รู้สาเหตุจริงๆ) คุณควรสร้างข้อมูลอ้างอิงของบริการเว็บตามปกติ


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

7
@coffeeaddict ฉันคิดว่าคุณและเจ้านายของคุณได้รับทราบข้อมูลผิด ๆ การอ้างอิงทั้งสองประเภทจะสร้างคลาสที่มีวิธีการเรียกใช้การดำเนินการบริการ มีความเกี่ยวข้องอย่างไรที่คลาสที่สร้างโดยการอ้างอิง "บริการ" เกิดขึ้นเพื่อสืบทอดจากคลาสพื้นฐานซึ่งเกิดขึ้นในไลบรารีที่ Microsoft ถือว่าเป็นส่วนหนึ่งของเทคโนโลยีบางอย่างที่เรียกว่า WCF
Daniel Pratt

1
จะต้องใช้. NET 2.0 บนคอมพิวเตอร์ด้วยหรือไม่? หรือ. NET 4.0 จะสามารถจัดการกับเทคโนโลยี "Web Reference" ที่ใช้. NET 2.0 ได้หรือไม่? ฉันต้องการทราบว่าเนื่องจากฉันกำลังปรับใช้บริการเว็บเซิร์ฟเวอร์ SOAP เป็น "การอ้างอิงเว็บ" ในแอปพลิเคชัน. NET 4.0
ผู้ใช้คอมพิวเตอร์

3

ในท้ายที่สุดทั้งสองก็ทำสิ่งเดียวกัน มีความแตกต่างบางประการในรหัส: บริการเว็บไม่ได้เพิ่มเนมสเปซรูทของโปรเจ็กต์ แต่การอ้างอิงบริการจะเพิ่มคลาสบริการให้กับเนมสเปซของโปรเจ็กต์ ServiceSoapClientระดับได้รับการตั้งชื่อที่แตกต่างกันซึ่งไม่ได้เป็นสิ่งที่สำคัญ ในการทำงานกับ TFS ฉันควรใช้ Service Reference เพราะทำงานได้ดีกว่ากับ Source Control ทั้งสองทำงานกับโปรโตคอล SOAP

ฉันพบว่าการใช้ Service Reference จะดีกว่าเพราะเป็นข้อมูลใหม่และจะได้รับการดูแลที่ดีกว่า

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