先来看一下用Delphi开发的WebService服务接口CzyLogin方法原型:
//判断操作员是否登录成功,返回值true/false,若登录失败sError参数返回失败原因,其原型为:
function CzyLogin(const Czy_ID,Czy_Pwd:string;const sVersion:string;out sError:string):Boolean;stdcall; begin //... end;
webservices.asp文件:
<% Dim WebSrv,WebSrvUrl,WebNameSpace WebSrv="localhost:8081" '提供WebService服务的服务器,形式:IP:Port WebSrvUrl="http://"&WebSrv&"/NetPayWadSrv.NetPay/soap/IAdmin" WebNameSpace="urn:uAdminIntf-IAdmin" '接口函数所在的命名空间 Function CzyLogin(Czy_ID,Czy_Pwd,sError) 'CzyLogin函数判断操作员登录是否成功,其原型为: 'function CzyLogin(const Czy_ID,Czy_Pwd:string;const sVersion:string;out sError:string):Boolean;stdcall; '//返回值true/false,若登录失败sError参数返回失败原因。 sVersion = "1.1.0.28" SoapRequest="<?xml version='1.0'?>"&_ "<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' "&_ "xmlns:xsd='http://www.w3.org/2001/XMLSchema' "&_ "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "&_ "xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'>"&_ "<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>"&_ "<NS1:CzyLogin xmlns:NS1='"&WebNameSpace&"'>"&_ "<Czy_ID xsi:type='xsd:string'>"&Czy_ID&"</Czy_ID>"&_ "<Czy_Pwd xsi:type='xsd:string'>"&Czy_Pwd&"</Czy_Pwd>"&_ "<sVersion xsi:type='xsd:string'>"&sVersion&"</sVersion>"&_ "</NS1:CzyLogin>"&_ "</SOAP-ENV:Body>"&_ "</SOAP-ENV:Envelope>" 'Response.Write(SoapRequest) 'Response.End() Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP") xmlhttp.Open "POST",WebSrvUrl,false xmlhttp.setRequestHeader "Content-Type", "text/xml;charset='utf-8'" xmlhttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" xmlhttp.setRequestHeader "User-Agent", "Borland SOAP 1.2" xmlhttp.setRequestHeader "HOST",WebSrv xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest) xmlhttp.setRequestHeader "SOAPAction", WebNameSpace&"#CzyLogin" xmlhttp.setRequestHeader "Cache-Control", "no-cache" xmlhttp.Send(SoapRequest) 'Response.Write xmlhttp.Status&"|"&xmlhttp.StatusText 'Response.Write xmlhttp.responsetext 'Response.End() If xmlhttp.Status = 200 Then Set xmlDOC = server.CreateObject("MSXML.DOMDocument") xmlDOC.load(xmlhttp.responseXML) '=====================BEGIN 测试代码====================' 'xmlDOC.Save("e:\result.xml") 'xmlStr = xmlDOC.xml 'xmlStr = Replace(xmlStr,"<","<",1,-1,1) 'xmlStr = Replace(xmlStr,">",">",1,-1,1) 'Response.write xmlStr 'Response.write "<hr />" '=====================END 测试代码====================' CzyLogin=xmlDOC.documentElement.selectNodes("//return")(0).text sError=xmlDOC.documentElement.selectNodes("//sError")(0).Text 'selectNodes("//NS1:CzyLoginResponse")(0).Text等同于childNodes.item(0).Text '均为返回所有参数字符串相加的总串 'str=xmlDOC.documentElement.selectNodes("//NS1:CzyLoginResponse")(0).Text 'str=xmlDOC.documentElement.childNodes.item(0).Text 'Response.write CzyLogin&"<br />" 'Response.write sError&"<br />" Set xmlDOC = nothing Else CzyLogin="false" 'Response.Write xmlhttp.Status&" " sError=xmlhttp.StatusText End if Set xmlhttp = Nothing End Function %>其中最关键是如何获取WebService接口函数所在的命名空间,我们可以在Delphi中使用Web App Debug模式调试C/S客户端的方法来获取xml文件格式和命名空间,如:
例如:
在<NS1:CzyLogin xmlns:NS1='urn:uAdminIntf-IAdmin'>
和xmlhttp.setRequestHeader "SOAPAction", "urn:uAdminIntf-IAdmin#CzyLogin"中,
uAdminIntf-IAdmin就是CzyLogin接口方法函数所在的命名空间,命名空间描述文本由“接口单元名-接口名”构成,接口描述文本由“命名空间#接口名称”构成,如下图:
Test.asp测试文件:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Session.CodePage=65001%> <%Response.charset="utf-8"%> <!-- #include file="webservices.asp"--> <% Dim czyid,czypwd,sError czyid = "admin" czypwd = "admin123" sError = "" Response.Write "czyid='"&czyid&"'<br />" Response.Write "czypwd='"&czypwd&"'<br />" Response.Write "sError='"&sError&"'<br />" Response.Write "执行<br />" Response.Write "status=CzyLogin(czyid,czypwd,sError)" Response.Write "<br />结果:<hr />" status=CzyLogin(czyid,czypwd,sError) Response.write "status="&status&"<br />" If status="true" Then Response.write "登录成功!" else Response.write "登录失败!sError="&sError End If %>
运行结果: 下图为登录失败的执行结果:
下图为登录成功的执行结果:
测试代码下载:http://download.csdn.net/detail/xieyunc/9764212