วิธีแก้ไขปัญหาชื่อพื้นที่เริ่มต้นเมื่อเรียกใช้ ASP.NET
เว็บเซอร์วิสโดยใช้ SOAP Client จาก ASP
เมื่อทำงานกับเว็บเซอร์วิส ASP.NET
คุณอาจพบว่าการเรียกใช้บริการเหล่านี้จาก ASP
คลาสสิกอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด โดยเฉพาะอย่างยิ่งในเรื่องของชื่อพื้นที่ XML นี่อาจสร้างความยุ่งยากโดยเฉพาะหากคุณอยู่ในช่วงกลางของโครงการ การพยายามรวมแอปพลิเคชัน ASP
เก่าเข้ากับบริการ ASP.NET
สมัยใหม่
ในโพสต์บล็อกนี้ เราจะพูดถึงปัญหาเฉพาะเจาะจง: วิธีจัดการกับปัญหาชื่อพื้นที่เริ่มต้นเมื่อใช้ SOAP clients ในการสื่อสารกับเว็บเซอร์วิส ASP.NET
มาลงรายละเอียดกันเถอะ
ความเข้าใจปัญหา
จินตนาการว่าคุณมีเว็บเซอร์วิสที่กำหนดใน ASP.NET
ที่ประมวลผลข้อความ XML เมื่อคุณเรียกใช้บริการนี้จากรหัส ASP คลาสสิกของคุณโดยใช้ SOAP client คุณอาจสังเกตเห็นบางอย่างแปลก ๆ XML ที่ถึงวิธี ProcessMessage
ของคุณมีชื่อพื้นที่เริ่มต้นที่ไม่คาดคิดแนบอยู่ ซึ่งอาจนำไปสู่ข้อผิดพลาดในการประมวลผล เนื่องจากมันเปลี่ยนแปลงโครงสร้าง XML ที่คาดหวัง
พูดง่ายๆ ว่าจะเกิดอะไรขึ้น:
- โครงสร้าง XML ที่คาดหวัง: เว็บเซอร์วิสคาดหวังข้อความ XML โดยไม่มีชื่อพื้นที่เริ่มต้นที่เพิ่มเข้ามา
- XML ที่ถูกส่งจริง: SOAPClient จะห่อหุ้มข้อความ XML ในชื่อพื้นที่เริ่มต้น ทำให้เกิดปัญหาเมื่อประมวลผลข้อความในวิธีการฝั่งเซิร์ฟเวอร์
นี่คือตัวอย่างที่แสดงให้เห็นทั้งสองเวอร์ชันของข้อความ XML:
-
จาก SOAPClient:
<request xmlns="http://internalservice.net/messageprocessing"> <task>....xml ต่างๆ</task> </request>
-
XML ที่คาดหวัง:
<request> <task>....xml ต่างๆ</task> </request>
ความไม่ตรงกันนี้อาจนำไปสู่ความสับสนและข้อผิดพลาดที่อาจเกิดขึ้นในระหว่างการดำเนินการ
วิธีแก้ปัญหา
โชคดีที่มีวิธีการแก้ไขที่ง่ายกว่าการสร้าง proxy .NET ที่ใช้ COM ใหม่ทั้งหมด สิ่งที่ต้องทำคือปรับแต่งเล็กน้อยในวิธีที่คุณสร้างข้อความ XML ในรหัส ASP
ของคุณก่อนที่จะส่งไปยังเว็บเซอร์วิส
ขั้นตอนที่ 1: ปรับข้อความ XML
เทคนิคอยู่ที่การกำหนด XML อย่างชัดเจนโดยไม่มีชื่อพื้นที่ หรือใช้ชื่อพื้นที่เริ่มต้นที่ว่างเปล่า นี่คือวิธีที่คุณสามารถทำได้:
-
สร้างข้อความ XML: ตรวจสอบให้แน่ใจว่าเมื่อคุณสร้างข้อความ XML คุณตั้งชื่อพื้นที่เริ่มต้นให้เป็นสตริงว่าง วิธีนี้จะทำให้ลักษณะการทำงานของ SOAPClient ถูก override
นี่คือบรรทัดโค้ดที่ปรับปรุงแล้วซึ่งสร้างข้อความ XML:
xmlMessage = "<request xmlns=''><task>....xml ต่างๆ</task></request>"
ขั้นตอนที่ 2: ส่ง XML ที่อัปเดตแล้ว
ดำเนินการต่อด้วยโค้ดดั้งเดิมของคุณเพื่อเรียกใช้เว็บเซอร์วิสโดยใช้ xmlMessage
ที่ปรับแต่งแล้ว นี่คือวิธีที่จะทำให้การโทรของคุณดูหลังจากนั้น:
provWSDL = "http://servername:12011/MessageProcessor.asmx?wsdl"
Set service = CreateObject("MSSOAP.SoapClient30")
service.ClientProperty("ServerHTTPRequest") = True
Call service.MSSoapInit(provWSDL)
xmlMessage = "<request xmlns=''><task>....xml ต่างๆ</task></request>"
result = service.ProcessMessage(xmlMessage)
ทำไมถึงได้ผล
ด้วยการระบุ xmlns=''
คุณมีผลทำให้ SOAP client ไม่ใช้ชื่อพื้นที่เริ่มต้นกับองค์ประกอบ <request>
สิ่งนี้ทำให้มั่นใจได้ว่า XML ของคุณถูกส่งในรูปแบบที่บริการเว็บ ASP.NET
ของคุณสามารถประมวลผลได้โดยไม่เพิ่มความซับซ้อนที่ไม่จำเป็น
บทสรุป
การจัดการการรวม ASP
คลาสสิกกับบริการเว็บ ASP.NET
อาจเป็นสิ่งท้าทาย โดยเฉพาะเมื่อพูดถึงชื่อพื้นที่ XML และการส่งข้อความ SOAP โดยการปรับปรุงวิธีที่คุณสร้างข้อความ XML ของคุณ คุณสามารถรักษาการโต้ตอบที่ราบรื่นกับบริการเว็บและหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น
หากคุณพบปัญหาคล้าย ๆ กันในอนาคต อย่าลืมตรวจสอบว่าชื่อพื้นที่ได้รับการจัดการอย่างไรและรู้สึกอิสระที่จะปรับ XML ของคุณตามความเหมาะสม ขอให้โค้ดสนุก!