วิธีใช้ WSDL


126

ฉันต้องการใช้บริการเว็บ พวกเขาส่งไฟล์ WSDL มาให้ฉัน ฉันควรทำอย่างไรเพื่อเพิ่มลงในเว็บไซต์ของฉันและเริ่มใช้เป็นพร็อกซี (ถ้าฉันวางไว้ใน Virtual Directory จะสามารถค้นพบได้ แต่จะให้การเชื่อมต่อกับบริการเว็บจริงหรือไม่)


9
ฉันโหวตให้เพราะเป็นคำถามที่ฉันคิดว่าผู้ใช้คนอื่น ๆ ที่นี่จะได้รับประโยชน์จากการได้รับคำตอบ ฉันกำลังค้นหาปัญหาที่แน่นอนนี้และฉันดีใจที่พบปัญหาที่นี่
schizoid04

คำตอบ:


138

ฉันจะเปิดใช้ Visual Studio สร้างโครงการเว็บ (หรือแอปคอนโซล - ไม่สำคัญ)

สำหรับ. Net Standard:

  1. ฉันจะคลิกขวาที่โครงการและเลือก "เพิ่มการอ้างอิงบริการ" จากเมนูเพิ่มบริบท
  2. ฉันจะคลิกที่ขั้นสูงจากนั้นคลิกที่เพิ่มการอ้างอิงบริการ
  3. ฉันจะได้รับเส้นทางไฟล์ที่สมบูรณ์ของ wsdl และวางลงในแถบที่อยู่ จากนั้นยิงลูกศร (ปุ่มไป)
  4. หากมีข้อผิดพลาดในการพยายามโหลดไฟล์แสดงว่าต้องมี URL ที่เสียหายและยังไม่ได้รับการแก้ไขซึ่งไฟล์จะต้องแก้ไขดังที่แสดงด้านล่าง: ใส่คำอธิบายภาพที่นี่ ดูคำตอบนี้สำหรับข้อมูลเกี่ยวกับวิธีแก้ไข: คำตอบของ Stackoverflow: ไม่สามารถสร้างการอ้างอิงบริการสำหรับ wsdl ไฟล์

หากไม่มีข้อผิดพลาดคุณควรตั้งค่า NameSpace ที่คุณต้องการใช้เพื่อเข้าถึงบริการและจะสร้างขึ้นให้คุณ

สำหรับ. Net Core

  1. ฉันจะคลิกขวาที่โครงการและเลือกบริการที่เชื่อมต่อจากเมนูเพิ่มบริบท
  2. ฉันจะเลือก Microsoft WCF Web Service Reference Provider จากรายการ
  3. ฉันจะกดเรียกดูและเลือกไฟล์ wsdl ทันทีตั้งค่าเนมสเปซและฉันก็พร้อมที่จะไป อ้างถึง url แก้ไขข้อผิดพลาดด้านบนหากคุณพบข้อผิดพลาดใด ๆ

วิธีการใด ๆ ข้างต้นจะสร้างไคลเอนต์ WCF ที่เรียบง่ายและเป็นพื้นฐานให้คุณใช้ คุณควรพบคลาส "YourservicenameClient" ในโค้ดที่สร้างขึ้น

เพื่อวัตถุประสงค์ในการอ้างอิงไฟล์ cs ที่สร้างขึ้นสามารถพบได้ใน Obj / debug (หรือ release) / XsdGeneratedCode ของคุณและคุณยังสามารถค้นหา dlls ในโฟลเดอร์ TempPE ได้

บริการที่สร้างขึ้นควรมีวิธีการสำหรับแต่ละวิธีที่กำหนดไว้ในสัญญา WSDL

สร้างอินสแตนซ์ไคลเอนต์และเรียกใช้วิธีการที่คุณต้องการโทร - นั่นคือทั้งหมดที่มี!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

หากคุณต้องการระบุ URL ระยะไกล (ไม่ใช้ URL ที่สร้างขึ้นโดยค่าเริ่มต้น) คุณสามารถทำได้อย่างง่ายดายในตัวสร้างของพร็อกซีไคลเอ็นต์:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

configNameชื่อของปลายทางที่จะใช้อยู่ที่ไหน(คุณจะใช้การตั้งค่าทั้งหมดยกเว้น URL) และremoteURLเป็นสตริงที่แสดงถึง URL ที่จะเชื่อมต่อ (แทนค่าที่อยู่ในการกำหนดค่า)


ใช้งานได้ดี มีเพียงคำถามเดียวถ้าฉันมีไฟล์ wsdl ในเครื่องของฉันและฉันเพิ่มการอ้างอิงลงในไฟล์นี้ เมื่อเรียกใช้ Url มันจะเป็นที่หนึ่งที่โฮสต์บริการเว็บหรือฉันต้องระบุ Binding และ EndPoint?
jmayor

1
นั่นขึ้นอยู่กับคุณโดยค่าเริ่มต้นรหัสที่สร้างขึ้นสำหรับพร็อกซีไคลเอนต์จะมี URL ที่อยู่ใน WSDL หากคุณต้องการไปที่ URL อื่นคุณต้องระบุด้วยตัวเอง
marc_s

ทำไมง่ายขนาดนี้ ไม่มีที่จับเหรอ? : p ขอบคุณ!
Odys

1
ในฐานะที่เป็นคำตอบที่ยอมรับจะเป็นการดีหากคุณกล่าวถึงวิธีใช้ WSDL ที่โฮสต์บนเว็บจาก URL ด้วย
Caltor

ฉันคิดว่าฉันใกล้จะได้ผลแล้ว ฉันได้ติดตั้ง Web Service โดยใช้เครื่องมือ Add Service Reference ฉันสามารถสร้างอินสแตนซ์ไคลเอนต์ได้ แต่การเรียกใช้เมธอดนั้นเป็นสิ่งที่ฉันล้มเหลว จุดสิ้นสุดคือการใช้งาน Java และสิ่งที่ฉันเห็นคือ XML วิธีที่ฉันพยายามเรียกคือการค้นหาไคลเอ็นต์และ "อย่างอื่น" อย่างอื่นคือชั้นเรียน ซึ่งทำให้งง. ฉันสามารถใส่สิ่งนี้ในโพสต์ด้านล่างได้หากวิธีนี้ช่วยได้ แต่ฉันรู้สึกงุนงง
แผนที่

45

ในสตูดิโอภาพ

  • สร้างหรือเปิดโครงการ
  • คลิกขวาที่โปรเจ็กต์จากตัวสำรวจโซลูชัน
  • เลือก "เพิ่มการอ้างอิงบริการ"
  • วางที่อยู่ด้วย WSDL ที่คุณได้รับ
  • คลิกตกลง

หากไม่มีข้อผิดพลาดคุณควรจะเห็นการอ้างอิงบริการในเบราว์เซอร์ออบเจ็กต์และวิธีการที่เกี่ยวข้องทั้งหมด


9
<3 Visual Studio .. ใช่มันง่ายจริงๆ :)
cwap

3
OP ไม่มีที่อยู่ แต่เป็นไฟล์
Henk Holterman

1
ผู้ให้บริการเว็บอาจปิดใช้งาน WSDL (ความปลอดภัยโดยการปิดบัง) ดังนั้นจึงไม่มี URL ที่สามารถเข้าถึง WSDL ได้จากนั้นการเพิ่มการอ้างอิงเว็บใน VS จะไม่ทำงาน อย่างไรก็ตามผู้ให้บริการต้องการให้คุณ (ฉันหมายถึง OP) รู้ทุกสิ่งที่คุณต้องรู้เกี่ยวกับสัญญาบริการนั่นคือเหตุผลที่พวกเขาส่งไฟล์ WSDL ตอนนี้ OP จำเป็นต้องสร้างรหัสพร็อกซีจากนั้นคำถามคือทำอย่างไร
azheglov

3
โดยพิมพ์เส้นทางไปยังไฟล์ อะไรทำให้คุณคิดว่าไม่ได้ผล?
John Saunders

1
สวัสดี @vidalsasoon คุณช่วยอธิบายสั้น ๆ ได้ไหมว่าฉันจะใช้ชั้นเรียนเหล่านี้ที่ฉันเห็นใน class explorer ได้อย่างไร ?
CalZone

16

ใช้ยูทิลิตี้ WSDL.EXEเพื่อสร้างพร็อกซีบริการเว็บจาก WSDL

คุณจะได้รับซอร์สไฟล์ C # ขนาดยาวที่มีคลาสที่มีลักษณะดังนี้:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

ในโค้ดที่ใช้บริการบนเว็บฝั่งไคลเอ็นต์ของคุณ:

  1. สร้างอินสแตนซ์ MyService
  2. ตั้งค่าคุณสมบัติ URL
  3. เรียกใช้วิธีการเว็บ

5
สิ่งนี้ทำให้เกิด ASMX Webservice "แบบเก่า" ซึ่งเป็นบริการที่ล้าสมัยไปแล้วควรใช้ WCF แทนในปัจจุบัน
marc_s

7

หากคุณต้องการเพิ่มการอ้างอิง wsdl ในโครงการ. Net Core จะไม่มีตัวเลือก "เพิ่มการอ้างอิงเว็บ"

ในการเพิ่มการอ้างอิง WSDL ไปที่การแก้ไขปัญหา Explorer คลิกขวาที่อ้างอิงโครงการรายการและจากนั้นคลิกที่เพิ่มตัวเลือกการเชื่อมต่อบริการ

ใส่คำอธิบายภาพที่นี่

จากนั้นคลิก 'Microsoft WCF Web Service Reference':

ใส่คำอธิบายภาพที่นี่

ป้อนเส้นทางไฟล์ลงในกล่องข้อความ URI และนำเข้า WSDL:

ใส่คำอธิบายภาพที่นี่

มันจะสร้างไคลเอนต์ WCF ที่เรียบง่ายและพื้นฐานมากและคุณจะใช้มันดังนี้:

YourServiceClient client = new YourServiceClient();
client.DoSomething();

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