VS。NET 我可以说不吗?(再谈Web Service)下

 

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.   用客户端代码进行测试。

上一篇中我只用VSNET简单的建立了一个 ASP Form,上面放两个 Lable显示一下。其实对于客户端来说可以说多种多样的,可以是ASPHtmldotnet的应用程序,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-GETHTTPPOST。不过我想着重说的是CallServiceXML.asp这个文件的作法,从中你可以发现许多不同的东西,到底Web Service是通过什么来返回它提供的Service,它在干什么,结果也许你会发现很耳熟的SOAP。其实代理类是通过SOAP协议和ASP+的Web Service进行通讯。

 

你可以仔细考察下面的代码:

function btn_click (n1, n2)

        {

                var xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;

                var sXml  = "<?xml version=/"1.0/" ?>" ;

                      sXml += "<soap:Envelope "

                      sXml += "xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " ;

                      sXml += "xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" " ;

                      sXml += "xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">" ;

                      sXml += "<soap:Body>" ;

                      sXml += "<Add xmlns=/"http://tempuri.org//">" ;

                      sXml = sXml + "<n1>" + n1.value  + "</n1>" ;

                      sXml = sXml + "<n2>" + n2.value  + "</n2>" ;                     

                      sXml += "</Add></soap:Body></soap:Envelope>"

               

                  xmlObj.loadXML(sXml) ;

                // 完成请求的准备,手工生成一个SOAP的格式包(消息主体)

                XmlRequest.innerText =  xmlObj.xml  ;

                // 发出请求 并且得到服务器的回应。

                 var xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP") ;

                xmlHTTP.Open ( "Post", "http://localhost/WebService1/Service1.asmx", false) ;

                xmlHTTP.setRequestHeader("SOAPAction", "http://tempuri.org/Add") ;

                xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8" ) ;

                xmlHTTP.Send(xmlObj.xml) ;

                MyResult.innerText =  xmlHTTP.responseText ;

               

                var xmlResponse = xmlHTTP.responseXML ;

                              // xmlHTTP.responseXML 中就是服务器回应的结果

                answer.innerText = xmlResponse.selectSingleNode

("soap:Envelope/soap:Body/AddResponse/AddResult").text ;

 

看得出先构造一个SOAP的包然后把请求拿回来(selectSingleNode函数是XML
DOM
中的很通用的一个函数)具体的结果可以看09CallServiceXML.jpg

 

好了,通过上面我们完成了一个Web Service。这是完成一个Web Service的基本框架,剩下的你可以进行扩充实现你需要的功能。在最后我们具体考察了Web Service的协议和客户端的问题,涉及到SOAPXML的一些概念。尽管VSNET实现Web Service很方便,但手工实现也是完全可以的,但愿看完这篇文章之后你可以对VSNET说一次不。

最后附带整个的代码和图示。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值