----ดัชนี----
1.วิธีการขอสบู่
2. วิธีการโพสต์คำขอ
3. ฟังก์ชัน SHOWALLNODE (เกี่ยวกับแอตทริบิวต์ของโหนดและการแสดงข้อมูล)
-
หนึ่ง. ตัวอย่างคำขอ SOAP ด้านล่างนี้คือตัวอย่างคำขอ SOAP ตัวยึดตำแหน่งที่แสดงจะต้องถูกแทนที่ด้วยค่าจริง
โพสต์ /WebService1/UserSignOn.asmx HTTP/1.1
โฮสต์: 192.100.100.81
ประเภทเนื้อหา: text/xml; charset=utf-8
ความยาวเนื้อหา: length
SOAPAction: " http://tempuri.org/LoginByAccount "
<?xml version="1.0" encoding="utf-8"?>
<สบู่:ซองจดหมาย xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema " xmlns:soap=" http //schemas.xmlsoap.org/soap/envelope/ ">
<สบู่:ร่างกาย>
<LoginByAccount xmlns=" http://tempuri.org/ ">
<ชื่อผู้ใช้>สตริง</ชื่อผู้ใช้>
<รหัสผ่าน>สตริง</รหัสผ่าน>
</เข้าสู่ระบบโดยบัญชี>
</สบู่:ร่างกาย>
</สบู่:ซองจดหมาย>
ในการโต้ตอบกับ WEBSERVICE คุณต้องสร้างคำขอ SOAP ให้เหมือนกับด้านบนทุกประการ:
-
url = " http://192.100.100.81/WebService1/UserSignOn.asmx "
SoapRequest="<?xml version="&CHR(34)&"1.0"&CHR(34)&" encoding="&CHR(34)&"utf -8"&CHR(34)&"?>"& _
"<soap:Envelope xmlns:xsi="&CHR(34)&" http://www.w3.org/2001/XMLSchema-instance"&CHR(34 )&" "& _
"xmlns:xsd="&CHR(34)&" http://www.w3.org/2001/XMLSchema"&CHR(34 )&" "& _
"xmlns:soap="&CHR(34)&" http://schemas.xmlsoap.org/soap/envelope/"&CHR(34 )&">"& _
"<soap:Body>"& _
"<LoginByAccount xmlns="&CHR(34)&" http://tempuri.org/"&CHR(34 )&">"& _
"<ชื่อผู้ใช้>"&ชื่อผู้ใช้&"</ชื่อผู้ใช้>"& _
"<รหัสผ่าน>"&รหัสผ่าน&"</รหัสผ่าน>"& _
"</LoginByAccount>"& _
"</soap:Body>"& _
"</soap:Envelope>"
ตั้งค่า xmlhttp = server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open "POST",url,false
xmlhttp.setRequestHeader "ประเภทเนื้อหา", "text/xml;charset=utf-8"
xmlhttp.setRequestHeader "HOST", "192.100.100.81"
xmlhttp.setRequestHeader "ความยาวเนื้อหา", LEN (SoapRequest)
xmlhttp.setRequestHeader "SOAPAction", " http://tempuri.org/LoginByAccount " 'ต้องเป็นเนมสเปซเดียวกันกับ WEBSERVICE มิฉะนั้นบริการจะถูกปฏิเสธ
xmlhttp.Send (คำขอสบู่)
'นี่เป็นการส่งคำขอ SOAP ที่ตรงกับตัวอย่าง SOAP โดยใช้ XMLHTTP ได้สำเร็จ
'ตรวจสอบว่าสำเร็จหรือไม่:
การตอบสนองเขียน xmlhttp.Status&” ”
การตอบกลับเขียน xmlhttp.StatusText
ตั้งค่า xmlhttp = ไม่มีเลย
-
หากสำเร็จ 200 ok จะปรากฏขึ้น หากไม่สำเร็จ 500 Internal Server Error จะปรากฏขึ้น
หลังจากสำเร็จคุณสามารถใช้การตอบกลับของ WEBSERVICE ได้ดังนี้:
ตัวอย่างการตอบสนองของ SOAP ด้านล่างเป็นตัวอย่างการตอบสนองของ SOAP ตัวยึดตำแหน่งที่แสดงจะต้องถูกแทนที่ด้วยค่าจริง
HTTP/1.1 200 ตกลง
ประเภทเนื้อหา: text/xml; charset=utf-8
ความยาวเนื้อหา: ความยาว
<?xml version="1.0" encoding="utf-8"?>
<สบู่:ซองจดหมาย xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema " xmlns:soap=" http //schemas.xmlsoap.org/soap/envelope/ ">
<สบู่:ร่างกาย>
<LoginByAccountResponse xmlns=" http://tempuri.org/ ">
<LoginByAccountResult>สตริง</LoginByAccountResult>
</LoginByAccountResponse>
</สบู่:ร่างกาย>
</สบู่:ซองจดหมาย>
นี่คือตัวอย่างการตอบกลับ SOAP ที่สอดคล้องกับตัวอย่างคำขอ SOAP ในขณะนี้ หลังจากส่งคำขอสำเร็จแล้ว คุณสามารถดูการตอบกลับได้:
ถ้า xmlhttp.Status = 200 ให้
ตั้งค่า xmlDOC =server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
xmlStr = xmlDOC.xml
ตั้งค่า xmlDOC=nothing
xmlStr = แทนที่(xmlStr,"<",<")
xmlStr = แทนที่(xmlStr,">",">")
การตอบกลับเขียน xmlStr
อื่น
เขียน xmlhttp.Status&" "
Response.Write xmlhttp.StatusText
สิ้นสุดถ้า
หากคำขอถูกต้อง ระบบจะตอบกลับให้ครบถ้วน หากคำขอไม่ถูกต้อง (เช่น หมายเลขบัญชีและรหัสผ่านไม่ถูกต้อง) เนื้อหาการตอบกลับจะไม่สมบูรณ์
รับข้อมูลในการตอบกลับดังนี้:
ถ้า xmlhttp.Status = 200 ให้
ตั้งค่า xmlDOC = server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
Response.Write xmlDOC.documentElement.selectNodes("//LoginByAccountResult")(0).text 'แสดงข้อมูลที่โหนดเป็น LoginByAccountResult (หากถูกเข้ารหัส จะต้องถอดรหัส)
ตั้งค่า xmlDOC = ไม่มีอะไร
อื่น
Response.Write xmlhttp.Status&" "
การตอบกลับเขียน xmlhttp.StatusText
สิ้นสุดหาก
แสดง FUNCTION ของแต่ละแอตทริบิวต์และข้อมูลของโหนด:
Function showallnode(rootname,myxmlDOC)' ฉันหวังว่าทุกคนจะยังคงดำเนินการให้เสร็จสิ้นต่อไป
ถ้า rootname<>"" ให้
ตั้งค่า nodeobj=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"")'Current node object
nodeAttributelen=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"").attributes.length'The current number of node แอททริบิวต์
returnstring=returnstring&"<BR>ชื่อโหนด: "&rootname
if nodeobj.text<>"" แล้ว
returnstring=returnstring&"<BR>ข้อความของโหนด: ("&nodeobj.text&")"
สิ้นสุด if
returnstring=returnstring&"<BR>{<BR>"
ถ้า nodeAttributelen<>0 แล้ว
returnstring=returnstring&"<BR>มีแอตทริบิวต์ "&nodeAttributelen&" ซึ่งได้แก่: "
สิ้นสุดถ้า
สำหรับ i=0 ถึง nodeAttributelen-1
returnstring=returnstring&"<li>"&nodeobj.attributes(i).Name&": "&nodeobj.getAttribute(nodeobj.attributes(i).Name)&" </li>"
ถัดไป
ถ้า nodeobj.childNodes.Length<>0 แล้ว
ถ้า nodeobj.hasChildNodes() และ lcase(nodeobj.childNodes.item(0).nodeName)<>"#text" แล้วจะมีโหนดย่อยหรือไม่
ตั้งค่า childnodeobj=nodeobj.childNodes
childnodelen=nodeobj.childNodes.ความยาว
returnstring=returnstring&"<BR><BR>มีโหนดย่อย "&childnodelen&";<BR>ได้แก่: "
สำหรับ i=0 ถึง childnodelen-1
returnstring=returnstring&"<li>"&childnodeobj.item(i).nodeName&"</li>"
ต่อไป
สิ้นสุดถ้า
สิ้นสุดถ้า
returnstring=returnstring&"<BR>}<BR>"
response.write ส่งคืนสตริง
ตั้งค่า nodeobj=nothing
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
มันสามารถใช้ได้เช่นนี้:
ถ้า xmlhttp.Status = 200 ให้
ตั้งค่า xmlDOC = server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
showallnode "LoginByAccountResponse", xmlDOC' เรียก SHOWALLNODE
ตั้งค่า xmlDOC = ไม่มีอะไร
อื่น
Response.Write xmlhttp.Status&" "
Response.Write xmlhttp.StatusText
สิ้นสุดถ้า
2 ตัวอย่างคำขอ POST
HTTP โพสต์
ด้านล่างนี้คือตัวอย่างคำขอ HTTP POST ตัวยึดตำแหน่งที่แสดงจะต้องถูกแทนที่ด้วยค่าจริง
โพสต์ /WebService1/UserSignOn.asmx/LoginByAccount HTTP/1.1
โฮสต์: 192.100.100.81
ประเภทเนื้อหา: application/x-www-form-urlencoded
ความยาวเนื้อหา: ความยาว
ชื่อผู้ใช้=สตริง&รหัสผ่าน=สตริง
สร้างคำขอ POST:
-
url = " http://192.100.100.81/WebService1/UserSignOn.asmx/LoginByAccount "
SoapRequest="username="&username&"&password="&ชุดรหัส
ผ่าน xmlhttp = server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open "POST",url,false
xmlhttp.setRequestHeader "ประเภทเนื้อหา", "application/x-www-form-urlencoded"'หมายเหตุ
xmlhttp.setRequestHeader "HOST", "192.100.100.81"
xmlhttp.setRequestHeader "ความยาวเนื้อหา", LEN (SoapRequest)
xmlhttp.Send (SoapRequest)
'นี่เป็นการส่งคำขอ POST ที่ตรงกับตัวอย่าง HTTP POST โดยใช้ XMLHTTP ได้สำเร็จ
'ตรวจสอบว่าสำเร็จหรือไม่:
การตอบสนองเขียน xmlhttp.Status&” ”
การตอบกลับเขียน xmlhttp.StatusText
ตั้งค่า xmlhttp = ไม่มีเลย
-
หากสำเร็จ 200 ok จะปรากฏขึ้น หากไม่สำเร็จ 500 Internal Server Error จะปรากฏขึ้น
หลังจากสำเร็จคุณสามารถใช้การตอบกลับของ WEBSERVICE ได้ดังนี้:
HTTP โพสต์
ด้านล่างนี้คือตัวอย่างการตอบสนอง HTTP POST ตัวยึดตำแหน่งที่แสดงจะต้องถูกแทนที่ด้วยค่าจริง
HTTP/1.1 200 ตกลง
ประเภทเนื้อหา: text/xml; charset=utf-8
ความยาวเนื้อหา: ความยาว
<?xml version="1.0" encoding="utf-8"?>
<string xmlns=" http://tempuri.org/">string</string >
แสดง:
ถ้า xmlhttp.Status = 200 ให้
ตั้งค่า xmlDOC = server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
showallnode "string", xmlDOC 'เรียก SHOWALLNODE
ตั้งค่า xmlDOC = ไม่มีอะไร
อื่น
Response.Write xmlhttp.Status&" "
Response.Write xmlhttp.StatusText
สิ้นสุดถ้า
ข้างต้นเป็นวิธีสำหรับ ASP ในการใช้ส่วนประกอบ XMLHTTP เพื่อส่งคำขอ SOAP และเรียก WEBSERVICE ฉันแนะนำให้ใช้วิธีแรกในสภาพแวดล้อม ASP หากมีวิธีที่ดีกว่า โปรดติดต่อฉัน ที่ mailto: [email protected] วิธี HTTP GET จะมีปัญหากับภาษาจีนและปริมาณข้อมูลไม่มาก การใช้วิธี HTTP POST รู้สึกว่าไม่จำเป็น จริงๆ แล้ว ตัวอย่างข้างต้นใช้วิธี POST แต่ไม่ใช่คำขอ POST หากต้องการใช้ SOAP TOOLKIT คุณต้องติดตั้งซอฟต์แวร์ และไม่มีเวอร์ชันที่สืบทอด ---จบข้อความทั้งหมด