VS。NET 我可以說不嗎?(再談Web Service)下
小氣的神 2001.08.06
4. 完成對Web Service的測試之后,我們開始完成客戶端的工作,生成代理包,調用這個服務。
這部分也輕車熟路了,上篇文檔中的我也是手工完成的。具體分為兩步:
1. 先生成一個代理類。
wsdl /out:WebServiceProxyClass.cs http://localhost/WebService1/Service1.asmx
2. 然后編譯這個代理類。
csc /t:library /out:bin/MyWebServiceProxy.dll WebServiceProxyClass.cs
對于bin的目錄不是必須或要求的可以在任何目錄,完成這部之后,組件也自動的注冊了,也就是說你可以開始調用這個Web Service了。
5. 用客戶端代碼進行測試。
上一篇中我只用VS。NET簡單的建立了一個 ASP Form,上面放兩個 Lable顯示一下。其實對于客戶端來說可以說多種多樣的,可以是ASP,Html,dotnet的應用程序,ASP+頁面,VB程序、甚至是Java或其它任何語言生成的客戶端。這也真正表現了Web Service的意義,只要在Web上,你能找到這個Service,那么你就可以享受這個Service。
Html就很容易了比如:
<a href="http://localhost/WebService1/Service1.asmx/HelloWorld"> HelloWorld </a>你就可以完成測試。如果你要突出編程方式那么你可以象我上次一樣用 Service1 ServiceProxy = new Service1() ;
String strReturn = ServiceProxy.HelloWorld() ; 這樣的方式來獲得結果。在ClientHtml.html中我展現了兩種用于Web Service的協議:HTTP-GET和HTTP-POST。不過我想著重說的是CallServiceXML.asp這個文件的作法,從中你可以發現許多不同的東西,到底Web Service是通過什么來返回它提供的Service,它在干什么,結果也許你會發現很耳熟的SOAP。其實代理類是通過SOAP協議和ASP+的Web Service進行通訊。
你可以仔細考察下面的代碼:
function btn_click (n1, n2)
{
/t var xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;
/t var sXml = "<?xml version="1.0" ?>" ;
/t/t sXml += "<soap:Envelope "
/t/t sXml += "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" " ;
/t/t sXml += "xmlns:xsd="http://www.w3.org/2001/XMLSchema" " ;
/t /t sXml += "xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">" ;
/t/t sXml += "<soap:Body>" ;
/t/t sXml += "<Add xmlns="http://tempuri.org/">" ;
/t/t sXml = sXml + "<n1>" + n1.value + "</n1>" ;
/t/t sXml = sXml + "<n2>" + n2.value + "</n2>" ;/t/t
/t/t sXml += "</Add></soap:Body></soap:Envelope>"
/t
/t/t xmlObj.loadXML(sXml) ;
/t // 完成請求的準備,手工生成一個SOAP的格式包(消息主體)
/t XmlRequest.innerText = xmlObj.xml ;
/t // 發出請求 并且得到服務器的回應。
/t var xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP") ;
/t xmlHTTP.Open ( "Post", "http://localhost/WebService1/Service1.asmx", false) ;
/t xmlHTTP.setRequestHeader("SOAPAction", "http://tempuri.org/Add") ;
/t xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8" ) ;
/t xmlHTTP.Send(xmlObj.xml) ;
/t MyResult.innerText = xmlHTTP.responseText ;
/t
/t var xmlResponse = xmlHTTP.responseXML ;
/t/t/t // xmlHTTP.responseXML 中就是服務器回應的結果
/t answer.innerText = xmlResponse.selectSingleNode
("soap:Envelope/soap:Body/AddResponse/AddResult").text ;
看得出先構造一個SOAP的包然后把請求拿回來(selectSingleNode函數是XML
DOM中的很通用的一個函數)具體的結果可以看09CallServiceXML.jpg
好了,通過上面我們完成了一個Web Service。這是完成一個Web Service的基本框架,剩下的你可以進行擴充實現你需要的功能。在最后我們具體考察了Web Service的協議和客戶端的問題,涉及到SOAP和XML的一些概念。盡管VS。NET實現Web Service很方便,但手工實現也是完全可以的,但愿看完這篇文章之后你可以對VS。NET說一次不。
最后附帶整個的代碼和圖示。
|
新聞熱點
疑難解答
圖片精選