บทเรียนเกี่ยวกับบริการเว็บ SOAP: โปรโตคอล SOAP คืออะไร?
⚡ สรุปอย่างชาญฉลาด
SOAP (Simple Object Access Protocol) เป็นโปรโตคอลที่ใช้ XML สำหรับการเข้าถึงเว็บเซอร์วิสผ่าน HTTP เอกสารนี้จะอธิบายส่วนประกอบพื้นฐานของ SOAP โครงสร้างข้อความ ส่วนประกอบซองจดหมายและส่วนประกอบข้อผิดพลาด รูปแบบการสื่อสาร และตัวอย่างเว็บเซอร์วิส ASMX ที่ใช้งานได้จริง
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
- เมื่อพัฒนาping เว็บเซอร์วิสแบบ SOAP จำเป็นต้องมีภาษาที่ใช้สำหรับให้เว็บเซอร์วิสสื่อสารกับแอปพลิเคชันไคลเอ็นต์ SOAP เป็นสื่อกลางที่เหมาะสมที่สุด ซึ่งได้รับการพัฒนาขึ้นเพื่อจุดประสงค์นี้ โปรโตคอลนี้ยังได้รับการแนะนำโดยกลุ่ม W3C ซึ่งเป็นองค์กรกำกับดูแลมาตรฐานเว็บทั้งหมดอีกด้วย
- SOAP เป็นโปรโตคอลน้ำหนักเบาที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน สังเกตคำหลัก 'เบาเนื่องจากการเขียนโปรแกรม SOAP นั้นใช้ภาษา XML ซึ่งเป็นภาษาสำหรับการแลกเปลี่ยนข้อมูลที่มีน้ำหนักเบา ดังนั้นโปรโตคอล SOAP จึงจัดอยู่ในประเภทเดียวกันด้วย
- SOAP ถูกออกแบบมาให้เป็นอิสระจากแพลตฟอร์มและระบบปฏิบัติการ ดังนั้นโปรโตคอล SOAP จึงสามารถทำงานร่วมกับแอปพลิเคชันที่ใช้ภาษาโปรแกรมใดๆ ก็ได้ทั้งบนแพลฟอร์มและระบบปฏิบัติการ Windows และ ลินุกซ์ แพลตฟอร์ม
- SOAP ทำงานบนโปรโตคอล HTTP ซึ่งเป็นโปรโตคอลเริ่มต้นที่ใช้โดยเว็บแอปพลิเคชันทั้งหมด ดังนั้นจึงไม่จำเป็นต้องมีการปรับแต่งใดๆ เพื่อเรียกใช้เว็บเซอร์วิสที่สร้างขึ้นบนโปรโตคอล SOAP บนเวิลด์ไวด์เว็บ
สบู่สำเร็จรูป
ข้อกำหนด SOAP กำหนดสิ่งที่เรียกว่า “ข้อความสบู่ซึ่งเป็นสิ่งที่ถูกส่งไปยังเว็บเซอร์วิสและแอปพลิเคชันไคลเอ็นต์
แผนภาพด้านล่างของสถาปัตยกรรม SOAP แสดงให้เห็นองค์ประกอบต่างๆ ของข้อความ SOAP
ข้อความ SOAP เป็นเพียงเอกสาร XML ซึ่งมีส่วนประกอบด้านล่างนี้
- An ซองจดหมาย องค์ประกอบที่ระบุว่าเอกสาร XML นั้นเป็นข้อความ SOAP – นี่คือส่วนที่บรรจุข้อความ SOAP และใช้เพื่อห่อหุ้มรายละเอียดทั้งหมดในข้อความ SOAP นี่คือองค์ประกอบรากในข้อความ SOAP
- A ส่วนหัว องค์ประกอบที่ประกอบด้วยข้อมูลส่วนหัว – องค์ประกอบส่วนหัวสามารถประกอบด้วยข้อมูลต่างๆ เช่น ข้อมูลประจำตัวการตรวจสอบสิทธิ์ ซึ่งแอปพลิเคชันที่เรียกใช้งานสามารถใช้ได้ นอกจากนี้ยังสามารถประกอบด้วยคำจำกัดความของประเภทข้อมูลที่ซับซ้อนซึ่งสามารถใช้ในข้อความ SOAP ได้ โดยค่าเริ่มต้น ข้อความ SOAP สามารถมีพารามิเตอร์ซึ่งอาจเป็นประเภทข้อมูลพื้นฐาน เช่น สตริงและตัวเลข แต่ก็สามารถเป็นประเภทออบเจ็กต์ที่ซับซ้อนได้เช่นกัน
ตัวอย่างบริการ SOAP อย่างง่ายของประเภทข้อมูลที่ซับซ้อนแสดงอยู่ด้านล่าง สมมติว่าเราต้องการส่งข้อมูลที่มีโครงสร้างซึ่งประกอบด้วย "ชื่อบทเรียน" และ "บทเรียน" Descriptหากเราต้องการ "ไอออน" เราจะกำหนดประเภทของสารประกอบเชิงซ้อนดังที่แสดงด้านล่าง ประเภทของสารประกอบเชิงซ้อนถูกกำหนดโดยแท็กขององค์ประกอบ องค์ประกอบที่จำเป็นทั้งหมดของโครงสร้าง พร้อมด้วยชนิดข้อมูลที่เกี่ยวข้อง จะถูกกำหนดไว้ในชุดชนิดข้อมูลที่ซับซ้อน
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
A ร่างกาย องค์ประกอบที่ประกอบด้วยข้อมูลการเรียกและการตอบกลับ – องค์ประกอบนี้คือส่วนที่บรรจุข้อมูลจริงที่ต้องส่งระหว่างเว็บเซอร์วิสและแอปพลิเคชันที่เรียกใช้ ด้านล่างนี้คือตัวอย่างเว็บเซอร์วิส SOAP ในส่วนของเนื้อหา SOAP ซึ่งใช้งานได้จริงกับประเภทที่ซับซ้อนที่กำหนดไว้ในส่วนหัว นี่คือการตอบกลับของ Tutorial Name และ Tutorial 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”
- "Guruฟังก์ชัน “99Webservice” รับพารามิเตอร์ประเภท 'int' และมีชื่อว่า TutorialID
ตอนนี้ข้อความ SOAP ข้างต้นจะถูกส่งผ่านระหว่างบริการเว็บและแอปพลิเคชันไคลเอนต์
คุณจะเห็นได้ว่าข้อมูลข้างต้นมีประโยชน์ต่อแอปพลิเคชันไคลเอ็นต์มากเพียงใด ข้อความ SOAP จะบอกแอปพลิเคชันไคลเอ็นต์ว่าชื่อของเว็บเซอร์วิสคืออะไร และเว็บเซอร์วิสนั้นคาดหวังพารามิเตอร์อะไรบ้าง รวมถึงประเภทของแต่ละพารามิเตอร์ที่เว็บเซอร์วิสรับเข้ามาด้วย
องค์ประกอบซองจดหมายสบู่
ส่วนแรกของ Building Block คือ SOAP Envelope
ซองจดหมาย SOAP ใช้เพื่อรวมรายละเอียดที่จำเป็นทั้งหมดของข้อความ SOAP ซึ่งแลกเปลี่ยนระหว่างบริการเว็บและแอปพลิเคชันไคลเอนต์
องค์ประกอบซองจดหมาย SOAP ใช้เพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของข้อความ SOAP ซึ่งช่วยให้แอปพลิเคชันไคลเอนต์ที่เรียกใช้บริการเว็บทราบว่าข้อความ SOAP สิ้นสุดลงเมื่อใด
สามารถสังเกตจุดต่อไปนี้ได้บนองค์ประกอบซองจดหมาย SOAP
- ข้อความ SOAP ทุกข้อความจำเป็นต้องมีองค์ประกอบ Envelope เป็นองค์ประกอบหลัก การมีองค์ประกอบ Envelope ในข้อความ SOAP นั้นเป็นสิ่งที่จำเป็นอย่างยิ่ง
- องค์ประกอบซองจดหมายทุกรายการต้องมีองค์ประกอบตัวสบู่อย่างน้อยหนึ่งองค์ประกอบ
- หากองค์ประกอบ Envelope มีองค์ประกอบส่วนหัว จะต้องมีองค์ประกอบไม่เกิน 1 รายการ และจะต้องปรากฏเป็นองค์ประกอบย่อยแรกของ Envelope ก่อนองค์ประกอบเนื้อหา
- ซองจดหมายจะเปลี่ยนไปเมื่อเวอร์ชัน SOAP เปลี่ยนไป
- โปรเซสเซอร์ SOAP ที่สอดคล้องกับ v1.1 จะสร้างข้อผิดพลาดเมื่อได้รับข้อความที่มีเนมสเปซซองจดหมาย v1.2
- ตัวประมวลผล SOAP ที่สอดคล้องกับ v1.2 สร้างข้อบกพร่องเวอร์ชันไม่ตรงกันหากได้รับข้อความที่ไม่มีเนมสเปซซองจดหมาย v1.2
ด้านล่างนี้คือตัวอย่าง SOAP API เวอร์ชัน 1.2 ขององค์ประกอบซองจดหมาย SOAP (SOAP envelope element)
<?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 ประกอบด้วยองค์ประกอบต่อไปนี้
- <faultCode> – นี่คือรหัสที่ระบุรหัสของข้อผิดพลาด รหัสข้อผิดพลาดอาจเป็นค่าใดค่าหนึ่งต่อไปนี้:
- 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 กระบวนการแกะข้อความ (unwrap) นี้เรียกว่าอะไรping คำขอที่ส่งมาจากลูกค้าเรียกว่า... การดีมาร์แชลล์.
ตัวอย่างสบู่เชิงปฏิบัติ
ตอนนี้อยู่ในนี้ 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 จากนั้นอย่าลืมระบุตำแหน่งที่จะจัดเก็บไฟล์ของโปรเจ็กต์ด้วย
เมื่อดำเนินการเสร็จสิ้น คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นใน Solution Explorer ของ Visual Studio 2013
ขั้นตอน 3) ในขั้นตอนนี้ เราจะเพิ่มไฟล์เว็บเซอร์วิสลงในโปรเจ็กต์ของเรา
- ขั้นแรก ให้คลิกขวาที่ไฟล์โปรเจ็กต์ดังที่แสดงด้านล่าง
- เมื่อคุณคลิกขวาที่ไฟล์โปรเจ็กต์ คุณจะมีโอกาสเลือกตัวเลือก “เพิ่ม->บริการเว็บ (ASMX)” เพื่อเพิ่มไฟล์บริการเว็บ เพียงตั้งชื่อไฟล์บริการเว็บว่า Tutorial Service
ขั้นตอน 4) เพิ่มโค้ดต่อไปนี้ลงในไฟล์ asmx ของบริการการสอนของคุณ
Code คำอธิบาย:
- โค้ดบรรทัดนี้ระบุชื่อไฟล์บริการเว็บของคุณ นี่เป็นขั้นตอนสำคัญเนื่องจากจะทำให้แอปพลิเคชันไคลเอ็นต์สามารถเรียกใช้บริการเว็บผ่านชื่อของบริการเว็บได้
- โดยปกติไฟล์คลาสจะใช้ในการสรุปการทำงานของบริการเว็บ ดังนั้นไฟล์คลาสจะมีคำจำกัดความของวิธีการเว็บทั้งหมดซึ่งจะมอบฟังก์ชันการทำงานบางอย่างให้กับแอปพลิเคชันไคลเอนต์
- ในที่นี้ [WebMethod] เป็นที่รู้จักในฐานะแอตทริบิวต์ที่อธิบายฟังก์ชัน ขั้นตอนต่อไปคือการสร้างฟังก์ชันที่เรียกว่า “Guru99WebService” แต่การเพิ่มแอตทริบิวต์ [WebMethod] เข้ามาทำให้มั่นใจได้ว่าเมธอดนี้สามารถเรียกใช้ได้โดยแอปพลิเคชันไคลเอ็นต์ หากไม่มีแอตทริบิวต์นี้ เมธอดจะไม่สามารถเรียกใช้ได้โดยแอปพลิเคชันไคลเอ็นต์
- ในที่นี้เรากำลังกำหนดฟังก์ชันที่ชื่อว่า 'Guruฟังก์ชัน '99WebService' จะใช้ส่งสตริงกลับไปยังแอปพลิเคชันไคลเอ็นต์ที่เรียกใช้ ฟังก์ชันนี้เป็นเว็บเซอร์วิสที่แอปพลิเคชันไคลเอ็นต์ใดๆ ก็สามารถเรียกใช้ได้
- เราใช้คำสั่ง return เพื่อส่งคืนสตริง “นี่คือ Guru99. บริการเว็บ” ให้กับแอปพลิเคชันไคลเอ็นต์
หากโค้ดถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันโค้ดในเบราว์เซอร์
Output:
- ผลลัพธ์แสดงให้เห็นอย่างชัดเจนว่าชื่อของเว็บเซอร์วิสของเราคือ “Guru"99 Web Service" ซึ่งเป็นผลมาจากการตั้งชื่อให้กับเว็บเซอร์วิสของเรา
- นอกจากนี้เรายังสามารถเรียกใช้บริการเว็บได้ หากเราคลิกปุ่ม "เรียกใช้" เราจะได้รับข้อความตอบกลับด้านล่างในเว็บเบราว์เซอร์
ผลลัพธ์ข้างต้น:
- แสดงให้เห็นอย่างชัดเจนว่า เมื่อเรียกใช้เมธอดเว็บ สตริง “นี่คือ Guru99 บริการเว็บ” ถูกส่งกลับมา
- นอกจากนี้ Visual Studio ยังช่วยให้คุณสามารถดูคำขอและการตอบสนองข้อความ SOAP ซึ่งสร้างขึ้นเมื่อเรียกใช้บริการเว็บข้างต้น
คำขอ SOAP ซึ่งสร้างขึ้นเมื่อมีการเรียกใช้บริการเว็บแสดงไว้ด้านล่าง
Code คำอธิบาย:
- ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมาย (envelope element) ซึ่งได้กล่าวถึงไปแล้วในบทก่อนหน้า องค์ประกอบนี้เป็นองค์ประกอบที่ห่อหุ้มข้อมูล (encapsulating element) ซึ่งมีอยู่ในทุกข้อความ 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>
Code คำอธิบาย:
- ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมาย (envelope element) ซึ่งได้กล่าวถึงไปแล้วในบทก่อนหน้า องค์ประกอบนี้เป็นองค์ประกอบที่ห่อหุ้มข้อมูล (encapsulating element) ซึ่งมีอยู่ในทุกข้อความ SOAP
- SOAP Body เป็นองค์ประกอบถัดไปและประกอบด้วยรายละเอียดที่แท้จริงของข้อความ SOAP
- ส่วนที่น่าสนใจที่คุณจะได้เห็นต่อไปนี้คือแอตทริบิวต์ 'string' แอตทริบิวต์นี้บอกแอปพลิเคชันไคลเอ็นต์ว่าเว็บเซอร์วิสที่ถูกเรียกใช้นั้นส่งคืนอ็อบเจ็กต์ประเภทสตริง ซึ่งมีประโยชน์มากเพราะมิเช่นนั้นแอปพลิเคชันไคลเอ็นต์จะไม่ทราบว่าเว็บเซอร์วิสส่งคืนอะไร














