วิธีใช้ไฟล์ WSDL เพื่อสร้างบริการ WCF (ไม่โทรออก)


100

ฉันมีไฟล์ WSDL เก่าและต้องการสร้างเซิร์ฟเวอร์โดยใช้ไฟล์ WSDL นี้

WSDL ถูกสร้างขึ้นจาก ASMX (ฉันคิดว่า แต่ฉันไม่แน่ใจ)

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?


คำถามเดิมที่ OP คิดว่าเขาจำเป็นต้องสร้างไคลเอนต์โดยใช้ WSDL

คำตอบ:


112

เมื่อใช้ svcutil คุณสามารถสร้างอินเทอร์เฟซและคลาส (สัญญาข้อมูล) จาก WSDL

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

สิ่งนี้จะสร้างไฟล์ชื่อ "your.cs" ใน C # (หรือ "your.vb" ใน VB.NET) ซึ่งมีรายการที่จำเป็นทั้งหมด

ตอนนี้คุณต้องสร้างคลาส "MyService" ซึ่งจะใช้อินเทอร์เฟซบริการ (IServiceInterface) - หรืออินเทอร์เฟซบริการต่างๆ - และนี่คืออินสแตนซ์เซิร์ฟเวอร์ของคุณ

ตอนนี้ชั้นเรียนด้วยตัวเองยังช่วยไม่ได้จริงๆคุณจะต้องจัดบริการที่ไหนสักแห่ง คุณต้องสร้างอินสแตนซ์ ServiceHost ของคุณเองซึ่งโฮสต์บริการกำหนดค่าจุดสิ้นสุดและอื่น ๆ - หรือคุณสามารถโฮสต์บริการของคุณภายใน IIS


ฉันลองใช้ svcutil เหมือนกัน แต่ไม่ประสบความสำเร็จกับข้อผิดพลาดจริงๆ คุณอาจมีคำแนะนำสำหรับปัญหาของฉัน: goo.gl/dlen
Juri

15
"svcutil your.wsdl your.xsd" คือสิ่งที่ฉันต้องการเพื่อให้ฉันทำงาน! ขอบคุณ!
Tim Lewis

3
ตรวจสอบคำตอบ SO นี้สำหรับข้อมูลเกี่ยวกับการดาวน์โหลด wsdl และ xsd ในรูปแบบที่ svcutil ต้องการ stackoverflow.com/questions/286657/…
Brett Widmeier

@marc_s เมื่อฉันใช้สิ่งนี้กับไฟล์ WSDL ของฉันดูเหมือนว่าจะเปลี่ยนชื่อองค์ประกอบบางอย่างด้วยวิธีที่แปลกมากซึ่งคำขอที่เข้ามาในเซิร์ฟเวอร์ของฉันจะไม่ได้รับการยอมรับด้วยซ้ำ เป็นเรื่องปกติหรือไม่?
Arj

@Arjun: ไม่ - ดูเหมือนว่าคุณต้องรวบรวมข้อเท็จจริงที่เกี่ยวข้องทั้งหมดและถามคำถามใน Stackoverflow! :-)
marc_s

41

มีแหล่งข้อมูลที่ดีหากคุณรู้ว่าจะค้นหาอะไร ลองใช้ "Contract First" และ WCF หรือ "WSDL First" และ WCF

นี่คือตัวเลือก:


3
กับทุกคนที่ดังต่อไปนี้ภาพรวมพื้นฐานของ WSDL แรกบทความ: ReplyAction="*"จดความคิดเห็นที่พูดคุยเกี่ยวกับ ดูเหมือนว่าคุณต้องกำจัดสิ่งนั้น มีคำอธิบายจากความคิดเห็นนั้นที่ให้เหตุผล แต่ฉันยังไม่ได้อ่าน
dan-gph

30

ใช้ svcutil.exe กับ/scสวิตช์เพื่อสร้างสัญญา WCF สิ่งนี้จะสร้างไฟล์โค้ดที่คุณสามารถเพิ่มลงในโปรเจ็กต์ของคุณ จะมีอินเทอร์เฟซและประเภทข้อมูลทั้งหมดที่คุณต้องการเพื่อสร้างบริการของคุณ เปลี่ยนตำแหน่งเอาต์พุตโดยใช้/oสวิตช์หรือคุณสามารถค้นหาไฟล์ในโฟลเดอร์ที่คุณรัน svcutil.exe ภาษาเริ่มต้นคือ C # แต่ฉันคิดว่า (ผมไม่เคยพยายามมัน) /l:vbคุณควรจะสามารถที่จะเปลี่ยนแปลงนี้ใช้

svcutil /sc "WSDL file path"

หาก WSDL ของคุณมีไฟล์ XSD ที่รองรับให้ส่งไฟล์เหล่านั้นเป็นอาร์กิวเมนต์หลัง WSDL

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

จากนั้นสร้างคลาสใหม่ที่เป็นบริการของคุณและใช้อินเทอร์เฟซสัญญาที่คุณเพิ่งสร้างขึ้น



7

คุณสามารถใช้ svcutil.exe เพื่อสร้างรหัสไคลเอนต์ ซึ่งจะรวมถึงคำจำกัดความของสัญญาบริการและสัญญาข้อมูลและสัญญาข้อผิดพลาดที่จำเป็น

จากนั้นเพียงแค่ลบรหัสไคลเอนต์: คลาสที่ใช้สัญญาบริการ จากนั้นคุณจะต้องติดตั้งด้วยตัวคุณเองในบริการของคุณ


4

เมื่อใช้เครื่องมือ "เพิ่มการอ้างอิงบริการ" ใน Visual Studio คุณสามารถแทรกที่อยู่เป็น:

ไฟล์: ///path/to/wsdl/file.wsdl

และจะโหลดอย่างถูกต้อง

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