บทช่วยสอนบริการเว็บ SOAP: SOAP Protocol คืออะไร ตัวอย่าง
SOAP คืออะไร?
SOAP เป็นโปรโตคอลที่ใช้ XML สำหรับการเข้าถึงบริการเว็บผ่าน HTTP มีข้อกำหนดบางประการที่สามารถใช้ได้กับทุกแอปพลิเคชัน
SOAP เป็นที่รู้จักในชื่อ Simple Object Access Protocol แต่ในเวลาต่อมาได้มีการย่อเหลือเพียง SOAP v1.2 SOAP เป็นโปรโตคอลหรืออีกนัยหนึ่งคือคำจำกัดความของวิธีที่บริการเว็บสื่อสารกันหรือสื่อสารกับแอปพลิเคชันไคลเอนต์ที่เรียกใช้งาน
SOAP ได้รับการพัฒนาให้เป็นภาษากลางเพื่อให้แอปพลิเคชันที่สร้างขึ้นจากภาษาโปรแกรมต่างๆ สามารถพูดคุยกันได้อย่างง่ายดาย และหลีกเลี่ยงความพยายามในการพัฒนาขั้นสุดขีด
บทนำสบู่
ในโลกปัจจุบัน มีแอปพลิเคชั่นจำนวนมากที่สร้างขึ้นจากภาษาการเขียนโปรแกรมที่แตกต่างกัน ตัวอย่างเช่น อาจมีการออกแบบเว็บแอปพลิเคชันขึ้นมา Javaอีกหนึ่งรายการใน .Net และอีกรายการใน PHP.
การแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันถือเป็นสิ่งสำคัญในโลกเครือข่ายในปัจจุบัน แต่การแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันที่มีความหลากหลายเหล่านี้จะมีความซับซ้อน ดังนั้นความซับซ้อนของโค้ดในการแลกเปลี่ยนข้อมูลจึงเพิ่มมากขึ้นด้วย
วิธีการหนึ่งที่ใช้ในการจัดการกับความซับซ้อนนี้คือการใช้ XML (Extensible Markup Language) เป็นภาษาตัวกลางในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน
ภาษาการเขียนโปรแกรมทุกภาษาสามารถเข้าใจภาษามาร์กอัป XML ได้ ดังนั้น XML จึงถูกใช้เป็นสื่อหลักในการแลกเปลี่ยนข้อมูล
แต่ไม่มีข้อกำหนดมาตรฐานเกี่ยวกับการใช้ XML ในทุกภาษาการเขียนโปรแกรมสำหรับการแลกเปลี่ยนข้อมูล นั่นคือที่มาของซอฟต์แวร์ SOAP
SOAP ได้รับการออกแบบมาให้ทำงานกับ XML ผ่าน HTTP และมีข้อกำหนดบางประการที่สามารถใช้กับแอปพลิเคชันทั้งหมดได้ เราจะมาดูรายละเอียดเพิ่มเติมเกี่ยวกับโปรโตคอล SOAP ในบทต่อไป
ข้อดีของสบู่
SOAP เป็นโปรโตคอลที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน ด้านล่างนี้คือเหตุผลบางประการว่าทำไมจึงใช้ SOAP
- เมื่อพัฒนาบริการบนเว็บที่ใช้ SOAP คุณจำเป็นต้องมีภาษาที่สามารถใช้สำหรับบริการเว็บเพื่อพูดคุยกับแอปพลิเคชันไคลเอนต์ สบู่เป็นสื่อกลางที่สมบูรณ์แบบซึ่งได้รับการพัฒนาเพื่อให้บรรลุวัตถุประสงค์นี้ โปรโตคอลนี้ยังแนะนำโดยสมาคม W3C ซึ่งเป็นหน่วยงานกำกับดูแลมาตรฐานเว็บทั้งหมด
- SOAP เป็นโปรโตคอลน้ำหนักเบาที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน สังเกตคำหลัก 'เบา- เนื่องจากการเขียนโปรแกรม SOAP ขึ้นอยู่กับภาษา XML ซึ่งตัวมันเองเป็นภาษาแลกเปลี่ยนข้อมูลน้ำหนักเบา ดังนั้น SOAP จึงเป็นโปรโตคอลที่อยู่ในหมวดหมู่เดียวกัน
- SOAP ได้รับการออกแบบมาให้เป็นอิสระจากแพลตฟอร์มและยังได้รับการออกแบบมาให้เป็นอิสระจากระบบปฏิบัติการอีกด้วย ดังนั้นโปรโตคอล SOAP จึงสามารถทำงานกับแอปพลิเคชันที่ใช้ภาษาการเขียนโปรแกรมใดก็ได้บนทั้งสองแพลตฟอร์ม Windows และ ลินุกซ์ เวที
- มันทำงานบนโปรโตคอล HTTP –SOAP ทำงานบนโปรโตคอล HTTP ซึ่งเป็นโปรโตคอลเริ่มต้นที่ใช้โดยเว็บแอปพลิเคชันทั้งหมด ดังนั้นจึงไม่มีการปรับแต่งใด ๆ ที่จำเป็นในการเรียกใช้บริการเว็บที่สร้างขึ้นบนโปรโตคอล SOAP เพื่อทำงานบนเวิลด์ไวด์เว็บ
สบู่สำเร็จรูป
ข้อกำหนด SOAP กำหนดสิ่งที่เรียกว่า “ข้อความสบู่” ซึ่งเป็นสิ่งที่ถูกส่งไปยังบริการเว็บและแอปพลิเคชันไคลเอนต์
แผนภาพด้านล่างของสถาปัตยกรรม SOAP แสดงให้เห็นองค์ประกอบต่างๆ ของข้อความ SOAP
ข้อความ SOAP เป็นเพียงเอกสาร XML ซึ่งมีส่วนประกอบด้านล่างนี้
- องค์ประกอบซองจดหมายที่ระบุเอกสาร XML ว่าเป็นข้อความ SOAP – นี่คือส่วนที่บรรจุข้อความ SOAP และใช้ในการห่อหุ้มรายละเอียดทั้งหมดในข้อความ SOAP นี่คือองค์ประกอบรากในข้อความ SOAP
- องค์ประกอบส่วนหัวที่ประกอบด้วยข้อมูลส่วนหัว องค์ประกอบส่วนหัวสามารถประกอบด้วยข้อมูล เช่น ข้อมูลรับรองความถูกต้องที่แอปพลิเคชันที่เรียกใช้สามารถใช้ได้ นอกจากนี้ยังสามารถประกอบด้วยคำจำกัดความของประเภทที่ซับซ้อนซึ่งอาจใช้ในข้อความ SOAP ได้ด้วย โดยค่าเริ่มต้น ข้อความ SOAP สามารถประกอบด้วยพารามิเตอร์ซึ่งอาจเป็นประเภทง่ายๆ เช่น สตริงและตัวเลข แต่สามารถเป็นประเภทอ็อบเจ็กต์ที่ซับซ้อนได้เช่นกัน
ตัวอย่างบริการ SOAP แบบง่ายที่มีประเภทที่ซับซ้อนแสดงด้านล่างนี้
สมมติว่าเราต้องการส่งประเภทข้อมูลที่มีโครงสร้างซึ่งประกอบด้วย "ชื่อบทช่วยสอน" และ "บทช่วยสอน" Description” จากนั้นเราจะกำหนดประเภทเชิงซ้อนดังแสดงด้านล่าง
ประเภทที่ซับซ้อนถูกกำหนดโดยแท็กองค์ประกอบ องค์ประกอบที่จำเป็นทั้งหมดของโครงสร้างพร้อมทั้งประเภทข้อมูลที่เกี่ยวข้องจะถูกกำหนดไว้ในคอลเลกชันประเภทที่ซับซ้อน
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- องค์ประกอบ Body ที่ประกอบด้วยข้อมูลการเรียกและการตอบกลับ – องค์ประกอบนี้ประกอบด้วยข้อมูลจริงที่ต้องส่งระหว่างเว็บเซอร์วิสและแอปพลิเคชันที่เรียกใช้ ด้านล่างนี้คือตัวอย่างเว็บเซอร์วิส SOAP ของเนื้อหา SOAP ที่ใช้งานได้จริงบนประเภทที่ซับซ้อนซึ่งกำหนดไว้ในส่วนหัว ต่อไปนี้คือการตอบสนองของชื่อบทช่วยสอนและบทช่วยสอน Descriptไอออนที่ถูกส่งไปยังแอปพลิเคชันการโทรซึ่งเรียกใช้บริการเว็บนี้
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
โครงสร้างข้อความสบู่
สิ่งหนึ่งที่ควรทราบก็คือ ข้อความ SOAP มักจะสร้างขึ้นโดยอัตโนมัติโดยบริการบนเว็บเมื่อมีการเรียกใช้
เมื่อใดก็ตามที่แอปพลิเคชันไคลเอนต์เรียกใช้วิธีการในบริการเว็บ บริการเว็บจะสร้างข้อความ SOAP โดยอัตโนมัติซึ่งจะมีรายละเอียดที่จำเป็นของข้อมูลที่จะถูกส่งไปยังบริการเว็บ
ตามที่ได้กล่าวไว้ในหัวข้อก่อนหน้าของบทช่วยสอน SOAP นี้ ข้อความ SOAP ง่าย ๆ มีองค์ประกอบดังต่อไปนี้
- องค์ประกอบซองจดหมาย
- องค์ประกอบส่วนหัวและ
- องค์ประกอบของร่างกาย
- องค์ประกอบข้อบกพร่อง (ไม่บังคับ)
ลองดูตัวอย่างด้านล่างของข้อความ SOAP แบบง่ายๆ และดูว่าองค์ประกอบใดทำหน้าที่ได้จริง
- ตามที่เห็นจากข้อความ SOAP ข้างต้น ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมายซึ่งใช้ในการห่อหุ้มข้อความ SOAP ทั้งหมด
- องค์ประกอบถัดไปคือเนื้อหา SOAP ซึ่งประกอบด้วยรายละเอียดของข้อความจริง
- ข้อความของเราประกอบด้วยบริการเว็บซึ่งมีชื่อว่า "Guru99WebService"
- “Guru99Webservice” ยอมรับพารามิเตอร์ประเภท 'int' และมีชื่อ TutorialID
ตอนนี้ข้อความ SOAP ข้างต้นจะถูกส่งผ่านระหว่างบริการเว็บและแอปพลิเคชันไคลเอนต์
คุณสามารถดูได้ว่าข้อมูลข้างต้นมีประโยชน์ต่อแอปพลิเคชันไคลเอนต์อย่างไร ข้อความ SOAP จะบอกแอปพลิเคชันไคลเอ็นต์ว่าชื่อของบริการบนเว็บคืออะไร และรวมถึงพารามิเตอร์ที่คาดหวัง และประเภทของพารามิเตอร์แต่ละตัวที่บริการบนเว็บใช้คืออะไร
องค์ประกอบซองจดหมายสบู่
ส่วนแรกของ Building Block คือ SOAP Envelope
ซองจดหมาย SOAP ใช้เพื่อรวมรายละเอียดที่จำเป็นทั้งหมดของข้อความ SOAP ซึ่งแลกเปลี่ยนระหว่างบริการเว็บและแอปพลิเคชันไคลเอนต์
องค์ประกอบซองจดหมาย SOAP ใช้เพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของข้อความ SOAP ซึ่งช่วยให้แอปพลิเคชันไคลเอนต์ที่เรียกใช้บริการเว็บทราบว่าข้อความ SOAP สิ้นสุดลงเมื่อใด
สามารถสังเกตจุดต่อไปนี้ได้บนองค์ประกอบซองจดหมาย SOAP
- ทุกข้อความ SOAP ต้องมีองค์ประกอบ Envelope รูท จำเป็นอย่างยิ่งสำหรับข้อความ SOAP ที่จะต้องมีองค์ประกอบซองจดหมาย
- องค์ประกอบซองจดหมายทุกรายการต้องมีองค์ประกอบตัวสบู่อย่างน้อยหนึ่งองค์ประกอบ
- หากองค์ประกอบ Envelope มีองค์ประกอบส่วนหัว จะต้องมีองค์ประกอบไม่เกิน 1 รายการ และจะต้องปรากฏเป็นองค์ประกอบย่อยแรกของ Envelope ก่อนองค์ประกอบเนื้อหา
- ซองจดหมายจะเปลี่ยนไปเมื่อเวอร์ชัน SOAP เปลี่ยนไป
- โปรเซสเซอร์ SOAP ที่สอดคล้องกับ v1.1 จะสร้างข้อผิดพลาดเมื่อได้รับข้อความที่มีเนมสเปซซองจดหมาย v1.2
- ตัวประมวลผล SOAP ที่สอดคล้องกับ v1.2 สร้างข้อบกพร่องเวอร์ชันไม่ตรงกันหากได้รับข้อความที่ไม่มีเนมสเปซซองจดหมาย v1.2
ด้านล่างนี้เป็นตัวอย่าง SOAP API ของเวอร์ชัน 1.2 ขององค์ประกอบซองจดหมาย SOAP
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding"> <soap:Body> <Guru99WebService xmlns="http://tempuri.org/"> <TutorialID>int</TutorialID> </Guru99WebService> </soap:Body> </SOAP-ENV:Envelope>
ข้อความแสดงข้อผิดพลาด
เมื่อมีการร้องขอไปยังบริการเว็บ SOAP การตอบสนองที่ส่งคืนอาจมี 2 รูปแบบ คือ การตอบสนองที่สำเร็จหรือการตอบสนองข้อผิดพลาด เมื่อสร้างความสำเร็จ การตอบกลับจากเซิร์ฟเวอร์จะเป็นข้อความ SOAP เสมอ แต่ถ้าเกิดข้อผิดพลาด SOAP ข้อผิดพลาดเหล่านั้นจะถูกส่งกลับเป็นข้อผิดพลาด “HTTP 500”
ข้อความข้อผิดพลาด SOAP ประกอบด้วยองค์ประกอบต่อไปนี้
- – นี่คือรหัสที่กำหนดรหัสของข้อผิดพลาด รหัสความผิดปกติอาจเป็นค่าใดค่าหนึ่งด้านล่างก็ได้
- SOAP-ENV:VersionMismatch – นี่คือเมื่อพบเนมสเปซที่ไม่ถูกต้องสำหรับองค์ประกอบ SOAP Envelope
- SOAP-ENV:MustUnderstand – ไม่เข้าใจองค์ประกอบย่อยขององค์ประกอบส่วนหัว ซึ่งมีแอตทริบิวต์ mustUnderstand ตั้งค่าเป็น "1" ไม่เข้าใจ
- SOAP-ENV: ไคลเอ็นต์ – ข้อความมีรูปแบบไม่ถูกต้องหรือมีข้อมูลที่ไม่ถูกต้อง
- SOAP-ENV: เซิร์ฟเวอร์ - เกิดปัญหากับเซิร์ฟเวอร์ ดังนั้นข้อความจึงไม่สามารถดำเนินการต่อได้
- – นี่คือข้อความที่ให้คำอธิบายโดยละเอียดของข้อผิดพลาด
- (ไม่จำเป็น)– นี่คือสตริงข้อความที่ระบุว่าใครเป็นสาเหตุของความผิด
- (ไม่จำเป็น) – นี่คือองค์ประกอบสำหรับข้อความแสดงข้อผิดพลาดเฉพาะแอปพลิเคชัน ดังนั้นแอปพลิเคชันอาจมีข้อความแสดงข้อผิดพลาดเฉพาะสำหรับสถานการณ์ตรรกะทางธุรกิจที่แตกต่างกัน
ตัวอย่างข้อความแสดงข้อผิดพลาด
ตัวอย่างของข้อความแสดงข้อผิดพลาดแสดงไว้ด้านล่าง ข้อผิดพลาดจะถูกสร้างขึ้นถ้าสถานการณ์สมมติที่ไคลเอนต์พยายามใช้วิธีการที่เรียกว่า TutorialID ในคลาส GetTutorial
ข้อความแสดงข้อผิดพลาดด้านล่างจะถูกสร้างขึ้นในกรณีที่ไม่มีวิธีการในคลาสที่กำหนด
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> <faultstring xsi:type="xsd:string"> Failed to locate method (GetTutorialID) in class (GetTutorial) </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Output:
เมื่อคุณรันโค้ดข้างต้น มันจะแสดงข้อผิดพลาดเช่น “ล้มเหลวในการค้นหาวิธีการ (GetTutorialID) ในคลาส (GetTutorial)”
แบบจำลองการสื่อสารสบู่
การสื่อสารทั้งหมดด้วย SOAP กระทำผ่านโปรโตคอล HTTP ก่อนที่จะมี SOAP มากมาย บริการเว็บ ใช้รูปแบบ RPC (Remote Procedure Call) มาตรฐานสำหรับการสื่อสาร นี่เป็นการสื่อสารประเภทที่ง่ายที่สุด แต่ก็มีข้อจำกัดมากมาย
ในบทช่วยสอน SOAP API นี้ ลองพิจารณาแผนภาพด้านล่างเพื่อดูว่าการสื่อสารนี้ทำงานอย่างไร ในตัวอย่างนี้ สมมติว่าเซิร์ฟเวอร์โฮสต์บริการเว็บซึ่งมี 2 วิธีดังนี้
- รับพนักงาน – นี่จะได้รับรายละเอียดพนักงานทั้งหมด
- ตั้งพนักงาน – นี่จะเป็นการกำหนดค่ารายละเอียด เช่น แผนกพนักงาน เงินเดือน ฯลฯ ตามลำดับ
ในการสื่อสารสไตล์ RPC ปกติ ไคลเอนต์จะเรียกใช้วิธีการในคำขอและส่งพารามิเตอร์ที่ต้องการไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะส่งการตอบกลับที่ต้องการ
รูปแบบการสื่อสารข้างต้นมีข้อจำกัดร้ายแรงด้านล่าง
- ไม่ขึ้นกับภาษา – เซิร์ฟเวอร์ที่โฮสต์เมธอดจะอยู่ในภาษาการเขียนโปรแกรมเฉพาะ และโดยปกติการเรียกไปยังเซิร์ฟเวอร์จะอยู่ในภาษาการเขียนโปรแกรมนั้นเท่านั้น
- ไม่ใช่โปรโตคอลมาตรฐาน – เมื่อมีการเรียกไปยังขั้นตอนระยะไกล การโทรจะไม่ดำเนินการผ่านโปรโตคอลมาตรฐาน นี่เป็นปัญหาเนื่องจากการสื่อสารทั้งหมดบนเว็บส่วนใหญ่ต้องทำผ่านโปรโตคอล HTTP
- ไฟร์วอลล์ – เนื่องจากการเรียก RPC ไม่ได้ดำเนินการผ่านโปรโตคอลปกติ จึงจำเป็นต้องเปิดพอร์ตแยกต่างหากบนเซิร์ฟเวอร์เพื่อให้ไคลเอ็นต์สามารถสื่อสารกับเซิร์ฟเวอร์ได้ โดยปกติไฟร์วอลล์ทั้งหมดจะบล็อกการรับส่งข้อมูลประเภทนี้ และโดยทั่วไปจำเป็นต้องมีการกำหนดค่าจำนวนมากเพื่อให้แน่ใจว่าการสื่อสารประเภทนี้ระหว่างไคลเอนต์และเซิร์ฟเวอร์จะทำงานได้
เพื่อเอาชนะข้อจำกัดทั้งหมดที่อ้างถึงข้างต้น SOAP จะใช้รูปแบบการสื่อสารด้านล่าง
- ไคลเอนต์จะจัดรูปแบบข้อมูลเกี่ยวกับการเรียกขั้นตอนและอาร์กิวเมนต์ใด ๆ ลงในข้อความ SOAP และส่งไปยังเซิร์ฟเวอร์โดยเป็นส่วนหนึ่งของคำขอ HTTP กระบวนการห่อหุ้มข้อมูลลงในข้อความ SOAP นี้เรียกว่า มาร์แชลล์.
- จากนั้นเซิร์ฟเวอร์จะแกะข้อความที่ลูกค้าส่ง ดูว่าลูกค้าร้องขออะไร จากนั้นจึงส่งการตอบกลับที่เหมาะสมกลับไปยังลูกค้าในรูปแบบข้อความ SOAP แนวทางปฏิบัติในการแกะคำขอที่ส่งโดยลูกค้าเรียกว่า การแบ่งเขต
ตัวอย่างสบู่เชิงปฏิบัติ
ในบทช่วยสอน SoapUI นี้ เรามาดูตัวอย่าง SOAP ที่ใช้งานได้จริง
อาจเป็นหนึ่งในวิธีที่ดีที่สุดในการดูว่าข้อความ SOAP ถูกสร้างขึ้นได้อย่างไรคือการดูการทำงานของบริการเว็บ
หัวข้อนี้จะดูการใช้ Microsoftกรอบงาน .Net เพื่อสร้างบริการเว็บ ASMX บริการเว็บประเภทนี้รองรับทั้ง SOAP เวอร์ชัน 1.1 และเวอร์ชัน 1.2
บริการเว็บ ASMX จะสร้างไฟล์ ภาษานิยามบริการเว็บ (WSDL) เอกสาร. เอกสาร WSDL นี้จำเป็นสำหรับแอปพลิเคชันไคลเอ็นต์ที่เรียก เพื่อให้แอปพลิเคชันทราบว่าบริการเว็บสามารถทำอะไรได้บ้าง
ในตัวอย่างของเรา เราจะสร้างบริการเว็บแบบธรรมดา ซึ่งจะใช้ในการส่งคืนสตริงไปยังแอปพลิเคชันที่เรียกใช้บริการเว็บ
บริการทางเว็บนี้จะโฮสต์อยู่ใน Asp.Net แอปพลิเคชันเว็บ จากนั้นเราจะเรียกใช้บริการเว็บและดูผลลัพธ์ที่บริการเว็บส่งคืน
นอกจากนี้ Visual Studio ยังแสดงให้เราเห็นข้อความ SOAP ที่ถูกส่งระหว่างเว็บเซอร์วิสและแอปพลิเคชันที่เรียกอีกด้วย
ข้อกำหนดเบื้องต้นในการตั้งค่าแอปพลิเคชันบริการเว็บของเราสามารถทำได้โดยทำตามขั้นตอนด้านล่างนี้
โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Visual Studio 2013 ไว้ในระบบของคุณแล้วสำหรับตัวอย่างนี้
ขั้นตอน 1) ขั้นตอนแรกคือการสร้างแอปพลิเคชันเว็บ ASP.Net ที่ว่างเปล่า จาก Visual Studio 2013 คลิกที่ตัวเลือกเมนู File->New project
เมื่อคุณคลิกที่ตัวเลือก New Project แล้ว Visual Studio จะแสดงกล่องโต้ตอบอีกอันให้คุณเลือกประเภทของโครงการและให้รายละเอียดที่จำเป็นของโครงการ ซึ่งจะอธิบายในขั้นตอนต่อไป
ขั้นตอน 2) ในขั้นตอนนี้
- ให้แน่ใจว่าได้เลือกก่อน C# เทมเพลตเว็บของแอปพลิเคชันบนเว็บ ASP.NET โปรเจ็กต์จะต้องเป็นประเภทนี้จึงจะสร้างโปรเจ็กต์บริการ SOAP ได้ เมื่อเลือกตัวเลือกนี้ Visual Studio จะดำเนินการตามขั้นตอนที่จำเป็นในการเพิ่มไฟล์ที่จำเป็นสำหรับแอปพลิเคชันบนเว็บ
- ตั้งชื่อโครงการของคุณซึ่งในกรณีของเราถูกกำหนดเป็น webservice.asmx จากนั้นตรวจสอบให้แน่ใจว่าได้ระบุตำแหน่งที่จะจัดเก็บไฟล์โครงการ
เมื่อเสร็จแล้ว คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นในตัวสำรวจโซลูชันใน Visual Studio 2013
ขั้นตอน 3) ในขั้นตอนนี้
เราจะเพิ่มไฟล์บริการเว็บในโครงการของเรา
- ขั้นแรกให้คลิกขวาที่ไฟล์โครงการดังที่แสดงด้านล่าง
- เมื่อคุณคลิกขวาที่ไฟล์โปรเจ็กต์ คุณจะมีโอกาสเลือกตัวเลือก “เพิ่ม->บริการเว็บ (ASMX) เพื่อเพิ่มไฟล์บริการเว็บ เพียงระบุชื่อ Tutorial Service สำหรับไฟล์ชื่อบริการเว็บ
ขั้นตอน 4) เพิ่มโค้ดต่อไปนี้ลงในไฟล์ asmx ของบริการการสอนของคุณ
คำอธิบายรหัส:
- โค้ดบรรทัดนี้ระบุชื่อไฟล์บริการเว็บของคุณ นี่เป็นขั้นตอนสำคัญเนื่องจากจะทำให้แอปพลิเคชันไคลเอ็นต์สามารถเรียกใช้บริการเว็บผ่านชื่อของบริการเว็บได้
- โดยปกติไฟล์คลาสจะใช้ในการสรุปการทำงานของบริการเว็บ ดังนั้นไฟล์คลาสจะมีคำจำกัดความของวิธีการเว็บทั้งหมดซึ่งจะมอบฟังก์ชันการทำงานบางอย่างให้กับแอปพลิเคชันไคลเอนต์
- ในที่นี้ [WebMethod] เรียกว่าแอตทริบิวต์ที่อธิบายฟังก์ชัน ขั้นตอนต่อมาจะสร้างฟังก์ชันที่เรียกว่า “Guru99WebService” แต่เมื่อรวมขั้นตอนในการเพิ่มแอตทริบิวต์ [WebMethod] นี้ไว้ด้วย จะทำให้แน่ใจได้ว่าแอปพลิเคชันไคลเอ็นต์สามารถเรียกใช้วิธีนี้ได้ หากไม่มีแอตทริบิวต์นี้ แอปพลิเคชันไคลเอ็นต์จะไม่สามารถเรียกใช้เมธอดนี้ได้
- ที่นี่เรากำลังกำหนดฟังก์ชันที่เรียกว่า 'Guru99WebService' ซึ่งจะใช้ในการส่งคืนสตริงไปยังแอปพลิเคชันไคลเอนต์ที่เรียก ฟังก์ชันนี้เป็นบริการบนเว็บซึ่งสามารถเรียกใช้โดยแอปพลิเคชันไคลเอ็นต์ใดก็ได้
- เรากำลังใช้คำสั่ง return เพื่อส่งคืนสตริง “นี่คือบริการเว็บ Guru99” ไปยังแอปพลิเคชันไคลเอนต์
หากโค้ดถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันโค้ดในเบราว์เซอร์
Output:
- ผลลัพธ์แสดงให้เห็นอย่างชัดเจนว่าชื่อของบริการบนเว็บของเราคือ “Guru99 Web Service” ซึ่งเป็นผลมาจากการให้ชื่อสำหรับบริการบนเว็บของเรา
- เรายังเห็นว่าเราสามารถเรียกใช้บริการเว็บได้ หากเราคลิกปุ่มเรียกใช้ เราจะได้รับการตอบสนองด้านล่างในเว็บเบราว์เซอร์
ผลลัพธ์ข้างต้น
- มันแสดงให้เห็นอย่างชัดเจนว่าโดยการเรียกใช้เมธอดเว็บ สตริง “นี่คือบริการเว็บ Guru99” จะถูกส่งกลับ
- นอกจากนี้ Visual Studio ยังช่วยให้คุณสามารถดูคำขอและการตอบสนองข้อความ SOAP ซึ่งสร้างขึ้นเมื่อเรียกใช้บริการเว็บข้างต้น
คำขอ SOAP ซึ่งสร้างขึ้นเมื่อมีการเรียกใช้บริการเว็บแสดงไว้ด้านล่าง
คำอธิบายรหัส:
- ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมายซึ่งเป็นสิ่งที่ถูกกล่าวถึงในบทที่แล้ว นี่คือองค์ประกอบการห่อหุ้มที่มีอยู่ในทุกข้อความ SOAP
- SOAP Body เป็นองค์ประกอบถัดไปและประกอบด้วยรายละเอียดที่แท้จริงของข้อความ SOAP
- ส่วนที่สามคือองค์ประกอบที่ระบุว่าเราต้องการเรียกใช้บริการที่เรียกว่า 'Guru99WebService'
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <Guru99WebServiceResponse xmlns="http://tempuri.org/"> <Guru99WebServiceResult>string</Guru99WebServiceResult> </Guru99WebServiceResponse> </soap:Body> </soap:Envelope>
คำอธิบายรหัส:
- ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมายซึ่งเป็นสิ่งที่ถูกกล่าวถึงในบทที่แล้ว นี่คือองค์ประกอบการห่อหุ้มที่มีอยู่ในทุกข้อความ SOAP
- SOAP Body เป็นองค์ประกอบถัดไปและประกอบด้วยรายละเอียดที่แท้จริงของข้อความ SOAP
- ส่วนที่น่าสนใจที่คุณจะเห็นตอนนี้คือแอตทริบิวต์ 'สตริง' ซึ่งจะแจ้งให้แอปพลิเคชันไคลเอนต์ทราบว่าเว็บเซอร์วิสที่กำลังเรียกใช้จะส่งคืนอ็อบเจ็กต์ที่มีประเภทสตริง ซึ่งมีประโยชน์มากเพราะหากแอปพลิเคชันไคลเอนต์ไม่ทราบว่าเว็บเซอร์วิสส่งคืนอะไร
สรุป
- SOAP เป็นโปรโตคอลที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันที่สร้างขึ้นบนที่แตกต่างกัน การเขียนโปรแกรมภาษา.
- SOAP สร้างขึ้นตามข้อกำหนด XML และทำงานร่วมกับโปรโตคอล HTTP ทำให้เหมาะสำหรับการใช้งานภายในเว็บแอปพลิเคชัน
- โครงสร้าง SOAP ประกอบด้วยข้อความ SOAP แต่ละข้อความ SOAP ประกอบด้วยองค์ประกอบซองจดหมาย ส่วนหัว และองค์ประกอบเนื้อหา
- องค์ประกอบซองจดหมายเป็นองค์ประกอบบังคับในข้อความ SOAP และใช้เพื่อห่อหุ้มข้อมูลทั้งหมดในข้อความ SOAP
- องค์ประกอบส่วนหัวสามารถใช้เพื่อใส่ข้อมูล เช่น ข้อมูลการตรวจสอบสิทธิ์หรือคำจำกัดความของประเภทข้อมูลที่ซับซ้อน
- องค์ประกอบเนื้อหาเป็นองค์ประกอบหลักซึ่งมีคำจำกัดความของวิธีการเว็บพร้อมกับข้อมูลพารามิเตอร์ใดๆ หากจำเป็น