网上汇款免手续费, 收货满意后卖家才能拿钱,货款都安全【skype充值卡】30分钟skype国内卡5元


Alibaba

本站首页    管理页面    写新日志    退出

首页(88) 政治新闻(9) 游戏人生(2) c技术(6) 趣闻趣事(8) javascript(2) 电子商务(5) 人间真谛(21) 计算机技术(17) 实习感想(1) 商务经济(16) 

 

          

 

  

 

 ♀最新日志                                  ♀最新回复                                  
俄罗斯今日与南奥塞梯签友好合作条约
天文专家解释,月亮为何有圆缺变化?
省长两次检讨,尴尬了谁?
组图:麦凯恩越战获释录像片段曝光
刘翔08年收入1.63亿仅次姚明 没投资
对撞机开启引发恐慌 印女孩怕宇宙爆炸自杀
真正的免费打电话了!
奥运火炬今天郑州传递!
奥运火炬明天就要在郑州传递了!
关于javascript的教程资料!
回复:网上购物买家精辟技巧
回复:网上购物买家精辟技巧
回复:网上购物买家精辟技巧
回复:网上购物买家精辟技巧
回复:奥运火炬明天就要在郑州传递了!
回复:UCDOS98使用说明
回复:QQ目录下各个文件的用途之不完全揭
回复:关于javascript的教程资料
回复:给每天在电脑面前超过4小时的网友
回复:Turbo C 概述
«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30
 
 

[计算机技术][收藏]一个简单的SOAP服务端和一个客户端 -- 作者:yibingzheng
文章收藏

本文转载自W3CHINA.ORG讨论区(BBS.W3CHINA.ORG)   原文链接作者:yibingzheng以下为原文:一个简单的SOAP服务端和一个客户端如果想了解SOAP到底是什么,就要自己动手建立自己的SOAP标准对象。本文可以帮助你起步。 简介SOAP - 简单对象处理协议(Simple Object Access Protocol) - 是当前XML开发的热点。它是微软新一代Visual Studio的主要角色,是".NET"策略的基础。如果想用VB 6编制一个有保障的SOAP服务,可以查阅微软的SOAP工具包(VB)。但如果想了解SOAP到底是什么,就要自己动手建立自己的SOAP标准对象。本文可以帮助你起步。 本文中,我们创建一个简单的SOAP服务端和一个客户端。服务端用ASP编写,名为soap.asp。这个文件应存放在个人Web服务器的根目录下,如:\Inetpub\wwwroot。这个服务器将接受和处理客户端提出的SOAP请求。客户端是一个简单的VB可执行文件,由Sub Main()启动。 步骤众所周知,SOAP是一个“呼叫-响应”机制,按客户/服务方式运行。客户端(应用程序)向服务端(位于互联网上的某个Web服务器)发出函数调用请求并传递参数;服务端则返回响应。呼叫与响应的内容和数据都是按XML文件格式进行传送的。因此,要建立一个简单的SOAP应用系统,就要建立一个客户端和一个服务端,即一个呼叫-响应体系。 下面是一个简单例子:我们建立一个服务端来计算销售交易的税款。按照传统的VB术语,即建立一个函数,定义如下:Public Function GetSalesTax(ByVal pSalesTotal As Double) as DoubleGetSalesTax = pSalesTotal * 0.04End Function 一个粗糙的函数,但可作为示例(本例只能用于税率为4%的地方)。这个函数定义了一个函数名(GetSalesTax),一个参数(pSalesTotal – 销售金额)和一个返回值(函数返回值)。按照面向对象原则,可以认为pSalesTotal是一个"IN"参数,GetSalesTax返回值是一个"OUT"参数。因此我们的SOAP服务端就要侦听客户发出的调用GetSalesTax的请求和传递的"IN"参数(销售金额),然后返回带有"OUT"参数的回应,向客户返回所需税款。 客户端下面是用VB建立一个呼叫服务的客户端程序:dblSalesTax = GetSalesTax(100)得到返回值$4。如果GetSalesTax函数是一个外部对象,比如在MTS服务器上,就要调用服务器上的DLL模块:Dim objTax As New CTaxCalcdblSalesTax = objTax.GetSalesTax(100) 在SOAP系统中,远程调用的方式略有不同,呼叫是通过XML文件传送到服务器的。XML文件里有调用的函数名和相应的参数:<GetSalesTax><SalesTotal>100</SalesTotal><GetSalesTax> 为确保服务器能够识别和解释客户请求,呼叫指令被包装到一个称之为SOAP信封的大文件里。这个信封使用的是SOAP封装标准的通用命名空间:<SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1"><SOAP:Header></SOAP:Header><SOAP:Body><GetSalesTax><SalesTotal>100</SalesTotal><GetSalesTax></SOAP:Body></SOAP:Envelope> 最后,加入函数调用的命名空间,起到函数声明的作用:<SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1"><SOAP:Header></SOAP:Header><SOAP:Body><m:GetSalesTax xmlns:m="urn:myserver/soap:TaxCalc"><SalesTotal>100</SalesTotal></m:GetSalesTax></SOAP:Body></SOAP:Envelope> 现在,已经准备好客户请求文件,可以送往服务端了。发送请求很简单,可以跟浏览器表单一样,用HTTP post方式。浏览器可以向服务端发送复杂的表单,.NET可以向服务器发送VB代码,但我使用XMLHTTP(IE 5以上版本才能用)。 假设strEnvelope含有XML文件格式的请求,发送格式如下:Dim objHTTP As New MSXML.XMLHTTPRequestDim strEnvelope As String '设定发往本地服务器objHTTP.open "post", "http://localhost/soap/soap.asp" '设定标准SOAP/ XML文件头格式objHTTP.setRequestHeader "Content-Type", "text/xml" '设置呼叫函数请求objHTTP.setRequestHeader "SOAPMethodName", _"urn:myserver/soap:TaxCalc#GetSalesTax" '呼叫SOAPobjHTTP.send strEnvelope '取得返回值strReturn = objHTTP.responseBody 至此,客户端完成了向服务端发送请求的过程。现在回到服务端,看看服务端如何侦听客户请求并作出响应。 服务端服务端要能够接收客户发出的HTTP请求,在本地服务器(http://localhost/soap.asp)接收到客户请求时作出回应。因此服务端要能够解析客户端发出的XML格式(SOAP封装)的请求,取出调用的函数名和参数。 服务端文件是soap.asp,它接收客户请求的做法是:Set objReq = Server.CreateObject("Microsoft.XMLDOM") objReq.Load Request 然后用XSL样式从封装的XML文件中取出参数:strQuery = "SOAP:Envelope/SOAP:Body/m:GetSalesTax/SalesTotal" varSalesTotal = objReq.SelectSingleNode(strQuery).Text 根据参数计算税款:varSalesTax = varSalesTotal * 0.04 在将结果返回给客户之前,要按SOAP标准做格式化封装。过程与客户端类似,只是把"IN"参数改换为"OUT"参数,并将函数标记名标为回应:<SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1"><SOAP:Header></SOAP:Header><SOAP:Body><m:GetSalesTaxResponse xmlns:m="urn:myserver/soap:TaxCalc"><SalesTax>4</SalesTax></m:GetSalesTaxResponse></SOAP:Body></SOAP:Envelope> 可以用字符串方式构造这个回应文件,也可以创建一个DOM对象,增加一个节点。文件返回给客户后,客户经过解码就能得到结果:Dim objReturn As New MSXML.DomDocumentobjReturn.LoadXML strReturnstrQuery = _"SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax" dblTax = objReturn.SelectSingleNode(strQuery).Text 这样就完成了一个简单的SOAP服务应用。虽然Visual Studio 7掩盖了内在的SOAP协议,但我希望本文有助于理解SOAP的操作过程。 下面是客户端VB代码:VB Client CodeSub Main()Dim objHTTP As New MSXML.XMLHTTPRequestDim strEnvelope As StringDim strReturn As StringDim objReturn As New MSXML.DOMDocumentDim dblTax As DoubleDim strQuery As String'创建SOAP封装strEnvelope = _"<soap:envelope xmlns:soap=""urn:schemas-xmlsoap-org:soap.v1"">" & _"<soap:header></soap:header>" & _"<soap:body>" & _"<m:getsalestax xmlns:m=""urn:myserver/soap:TaxCalculator"">" & _"<salestotal>100</salestotal>" & _"</m:getsalestax>" & _"</soap:body>" & _"</soap:envelope>"'设定发往本地服务器objHTTP.open "post", "http://localhost/soap.asp", False'设定标准SOAP/ XML格式objHTTP.setRequestHeader "Content-Type", "text/xml"'设置调用函数头objHTTP.setRequestHeader "SOAPMethodName", _"urn:myserver/soap:TaxCalculator#GetSalesTax"'SOAP呼叫objHTTP.send strEnvelope'取出返回信封strReturn = objHTTP.responseText'加载到DOMobjReturn.loadXML strReturn'查询返回值strQuery = _"SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax"dblTax = objReturn.selectSingleNode(strQuery).TextDebug.Print dblTaxEnd Sub下面是服务端ASP代码(文件名soap.asp,存放在本地服务器根目录下):<%Set objReq = Server.CreateObject("Microsoft.XMLDOM") '加载请求到XML DOMobjReq.Load Request '按照输入参数查询strQuery = "SOAP:Envelope/SOAP:Body/m:GetSalesTax/SalesTotal"varSalesTotal = objReq.SelectSingleNode(strQuery).Text '计算varSalesTax = varSalesTotal * 0.04 '准备返回信封strTmp = _"<soap:envelope xmlns:soap=""urn:schemas-xmlsoap-org:soap.v1"">" & _"<soap:header></soap:header>" & _"<soap:body>" & _"<m:getsalestaxresponse xmlns:m=""urn:myserver/soap:TaxCalc"">" & _"<salestax>" & varSalesTax & "</salestax>" & _"</m:getsalestaxresponse>" & _"</soap:body>" & _"</soap:envelope>" '回写结果文件Response.Write strTmp%> <完>参与讨论本主题
一兵征 发表于 2005/1/4 16:49:01

阅读全文(3049) | 回复(0) | 编辑 | 精华



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
 
♀链接

 

还有礼品赠送哦!


♀留言板
签写新留言

blog名称:一兵征
日志总数:88
评论数量:137
留言数量:-3
访问次数:549790
建立时间:2004年10月31日
用户名称:
登陆密码:
密码保存:




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.734 second(s), page refreshed 144793695 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号