




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB实现Soap XML解析如果想了解SOAP到底是什么,就要自己动手建立自己的SOAP标准对象简介SOAP - 简单对象处理协议(Simple Object Access Protocol) - 是当前XML开发的热点。它是微软新一代Visual Studio的主要角色,是.NET策略的基础。如果想用VB 6编制一个有保障的SOAP服务,可以查阅微软的SOAP工具包(VB)。但如果想了解SOAP到底是什么,就要自己动手建立自己的SOAP标准对象。本文可以帮助你起步。本文中,我们创建一个简单的SOAP服务端和一个客户端。服务端用ASP编写,名为soap.asp。这个文件应存放在个人Web服务器的根目录下,如:Inetpubwwwroot。这个服务器将接受和处理客户端提出的SOAP请求。客户端是一个简单的VB可执行文件,由Sub Main()启动。步骤众所周知,SOAP是一个“呼叫-响应”机制,按客户/服务方式运行。客户端(应用程序)向服务端(位于互联网上的某个Web服务器)发出函数调用请求并传递参数;服务端则返回响应。呼叫与响应的内容和数据都是按XML文件格式进行传送的。因此,要建立一个简单的SOAP应用系统,就要建立一个客户端和一个服务端,即一个呼叫-响应体系。下面是一个简单例子:我们建立一个服务端来计算销售交易的税款。按照传统的VB术语,即建立一个函数,定义如下: Public Function GetSalesTax(ByVal pSalesTotal As Double) as Double GetSalesTax = pSalesTotal * 0.04 End Function一个粗糙的函数,但可作为示例(本例只能用于税率为4%的地方)。这个函数定义了一个函数名(GetSalesTax),一个参数(pSalesTotal 销售金额)和一个返回值(函数返回值)。按照面向对象原则,可以认为pSalesTotal是一个IN参数,GetSalesTax返回值是一个OUT参数。因此我们的SOAP服务端就要侦听客户发出的调用GetSalesTax的请求和传递的IN参数(销售金额),然后返回带有OUT参数的回应,向客户返回所需税款。客户端下面是用VB建立一个呼叫服务的客户端程序: dblSalesTax = GetSalesTax(100) 得到返回值$4。 如果GetSalesTax函数是一个外部对象,比如在MTS服务器上,就要调用服务器上的DLL模块: Dim objTax As New CTaxCalc dblSalesTax = objTax.GetSalesTax(100)在SOAP系统中,远程调用的方式略有不同,呼叫是通过XML文件传送到服务器的。XML文件里有调用的函数名和相应的参数: 100 为确保服务器能够识别和解释客户请求,呼叫指令被包装到一个称之为SOAP信封的大文件里。这个信封使用的是SOAP封装标准的通用命名空间: 100 最后,加入函数调用的命名空间,起到函数声明的作用: 100 现在,已经准备好客户请求文件,可以送往服务端了。发送请求很简单,可以跟浏览器表单一样,用HTTP post方式。浏览器可以向服务端发送复杂的表单,.NET可以向服务器发送VB代码,但我使用XMLHTTP(IE 5以上版本才能用)。假设strEnvelope含有XML文件格式的请求,发送格式如下: Dim objHTTP As New MSXML.XMLHTTPRequest Dim 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 呼叫SOAP objHTTP.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参数,并将函数标记名标为回应: 4 可以用字符串方式构造这个回应文件,也可以创建一个DOM对象,增加一个节点。文件返回给客户后,客户经过解码就能得到结果: Dim objReturn As New MSXML.DomDocument objReturn.LoadXML strReturn strQuery = _ SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax dblTax = objReturn.SelectSingleNode(strQuery).Text这样就完成了一个简单的SOAP服务应用。虽然Visual Studio 7掩盖了内在的SOAP协议,但我希望本文有助于理解SOAP的操作过程。下面是客户端VB代码: VB Client Code Sub Main() Dim objHTTP As New MSXML.XMLHTTPRequest Dim strEnvelope As String Dim strReturn As String Dim objReturn As New MSXML.DOMDocument Dim dblTax As Double Dim strQuery As String 创建SOAP封装 strEnvelope = _ & _ & _ & _ & _ 100 & _ & _ & _ 设定发往本地服务器 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 加载到DOM objReturn.loadXML strReturn 查询返回值 strQuery = _ SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax dblTax = objReturn.selectSingleNode(strQuery).Text Debug.Print dblTax End Sub 下面是服务端ASP代码(文件名soap.asp,存放在本地服务器根目录下): % Set objReq = Server.CreateObject(Microsoft.XMLDOM) 加载请求到XML DOM objReq.Load Request 按照输入参数查询 strQuery = SOAP:Envelope/SOAP:Body/m:GetSalesTax/SalesTotal varSalesTotal = objReq.SelectSingleNode(strQuery).Text 计算 varSalesTax = varSal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红枣收购管理办法
- 长沙楼盘管理办法
- 物业实施管理办法
- 老师教育管理办法
- 芜湖种子管理办法
- 舞台收费管理办法
- 粮库防鼠管理办法
- 高中诚信主题班会课件
- 超市支付管理办法
- 维护台账管理办法
- 公司年度季度预算项目明细记录excel表模板
- (完整版)笔录模板
- ☆初中语文阅读理解必备100篇
- 教练场地技术条件说明
- 电力电缆基础知识培训
- 胡寿松 自动控制原理(第7版)笔记和课后习题(含考研真题)及答案详解(第七版-上册)
- 2023年重庆市大渡口区八桥镇社区工作人员考试模拟题及答案
- JJF 1251-2010坐标定位测量系统校准规范
- GB/T 40831-2021资产管理财务与非财务职能在资产管理活动中的一致性指南
- GB/T 28046.1-2011道路车辆电气及电子设备的环境条件和试验第1部分:一般规定
- GB/T 24405.2-2010信息技术服务管理第2部分:实践规则
评论
0/150
提交评论