




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用Visual C+建立SOAP客户端应用Soap是一个在信息交换中使用得非常广泛的协议,使用方便,并直接可与HTTP, SMTP等其它协议一起工作。本文讨论如何使用Microsoft SOAP Tookit的C+来建立一个简单的SOAP客户端应用。=一、先决条件:必须熟悉使用COM,特别要熟悉COM中的Smart Pointers。我通过导入方法将COM接口转换成Smart Pointers。系统必须安装了Microsoft SOAP Toolkit和Microsoft XML Parser。文末参考一节介绍如何下载工具箱。文末附件可下载本文源程序。二、SOAP编程基础:下面开始介绍一个简单SOAP应用中所包含的类。在此之前,必需先导入所需的类型库,然后程序才能够使用SOAP的类。导入类型库:SOAP中使用的对象和接口都在mssoap1.dll文件中。这个文件在安装Microsoft SOAP Toolkit 2.0时生成,存在路径:C:Program FilesCommon FilesMSSoapBinariesMSSOAP1.dll。用#import将该文件导入到程序中。类型库的内容在导入时被转换成COM smart pointers来描述COM接口。因为SOAP完全依赖于XML,因此必需用Microsoft XML Parser来处理XML。Microsoft XML parser在msxml3.dll文件里。这个文件要在导入mssoap1.dll之前导入。#import msxml3.dllusing namespace MSXML2; #import C:Program FilesCommon FilesMSSoapBinariesMSSOAP1.dll exclude(IStream, ISequentialStream, _LARGE_INTEGER, _ULARGE_INTEGER, tagSTATSTG, _FILETIME) using namespace MSSOAPLib; 上面这些代码是编写SOAP程序必需包含的。建立SOAP客户端应用有以下三步骤:1- 指定和连接Web服务器。2- 准备和发送消息。3- 读取服务端返回的信息。下面是在基本SOAP客户端要使用到的类:1- SoapConnector: 在客户/服务模式下,首先要做的事就是连接服务器。SoapConnector类执行客户端与服务端之间的消息传送协议。 SoapConnector是一个抽象类,定义了协议执行的接口。事实上, SoapConnector类不定义执行某种特定的传送协议,例如:MSMQ, MQ Series, SMTP 和 TCP/IP等。 为简便起见,本文只说明使用HTTP传送协议,它是由Microsoft SOAP Toolkit 2.0中的HttpConnector 类来执行的。SoapConnector类使用步骤如下:a) 创建SoapConnector类对象:ISoapConnectorPtr connector; Connector.CreateInstance(_uuidof(HttpConnector); b) 指定Web服务器地址:指定服务器,要做二件事:选择HttpConnector的属性和相应的属性值。本文示例选用EndPointURL属性:Connector-Property EndPointURL = some url pointing to web service; 以下是属性选项说明(属性名是大小写敏感的):AuthPassword:客户口令AuthUser:客户名EndPointURL :客户URL ProxyPassword: 代理(proxy)口令ProxyPort :代理断口ProxyServer :代理服务器的IP地址或主机名ProxyUser :代理用户名SoapAction:HTTP的抬头值。这个属性只使用于低级API。它将忽略SoapClient接口(高级API)中的ConnectorProperty属性 。SSLClientCertificateName:指定使用Secure Sockets Layer (SSL)加密协议。语法如下:CURRENT_USER | LOCAL_MACHINEstore-namecert-name with the defaults being CURRENT_USERMY (与Microsoft Internet Explorer用法相同)。Timeout:HttpConnector的超时限制,以毫秒为单位。UseProxy:定义是否使用代理(proxy)。缺省值为False。如果将这个属性为真(True),又没有设置上面的ProxyServer值,代理服务器将使用IE里的代理服务器。此时HttpConnector将不理会IE的Bypass Proxy(绕道)设置。UseSSL:定义是否使用SSL(True 或 False)。此值设置为真时,HttpConnector对象不管WSDL设置是HTTP或HTTPS都用SSL连接方式。若此值设置为非真,HttpConnector对象只在WSDL设置为HTTPS时才用SSL方式连接。c) 与Web服务器连接:Connector-Connect(); d) 指定动作:Connector-Property SoapAction = some uri; e) 启动消息句柄:必需在SoapSerializer(消息准备函数)之前先启动消息处理机制 Connector-BeginMessage(); 在消息处理完毕之后,用EndMessage()函数将消息送往服务器。. . 消息准备代码 .Connector-EndMessage(); 以上就是与服务器连接的过程。下面介绍如何创建和准备消息。SoapSerializer: 用于建立送往服务器的SOAP消息。在与服务器通讯之前,SoapSerializer对象必需先与SoapConnector对象连接。SoapSerializer的初始化函数将建立这个内部连接。初始化代入的参数是InputStream (数据流): / 创建SoapSerializer对象,并用InputSTream进行初始化。ISoapSerializerPtr Serializer; Serializer.CreateInstance(_uuidof(SoapSerializer); Serializer-Init(_variant_t(IUnknown*)Connector-InputStream); 下面是SOAP请求代码: someParameterValue SOAP请求被安放在标记之中。是SOAP文件的主标记。SOAP信息通常都安放在”信封“(Envelope)里。信封里的标记中安放信息体,其中包含具体请求。在C+里,用相应的方法来解释这些标记并定义有关的值。下面的代码说明如何使用这些方法:Serializer-startEnvelope(SOAP,); / 开始处理SOAP消息。第一个参数是命名空间,缺省为SOAP-ENV。/ 第二个参数定义URI。第三个参数定义Serialzier-startBody()函数的编码方式。/ 开始处理元素,第一个参数是URI的编码类型,缺省为NONE。Serializer-startElement(someMethodName,m); / 开始处理Body里的子元素。/ 第一个参数是元素名。第二个参数是URI。/ 第三个参数编码类型。第四个参数是元素的命名空间。Serializer-WriteString(someParameterValue) / 写入元素值在上面的每个startXXX函数后都要又相应的endXXX函数来结尾。消息做完之后,连接器就调用endMessage()方法将消息发送到服务器。至此,我们已经连接了服务器,制作了相应的消息。最后一个步骤就是接收服务器回应。SoapReader: 读取服务器返回的信息,将信息解析之后装入DOM,为进一步处理所用。下面是服务器返回的SOAP回应信息: someResult 使用OutputStream来读取SoapReader对象中的信息。(OutputStream接收服务器返回的信息)。 / 创建SOAPReader对象,并连接到outputstreamISoapReaderPtr Reader; Reader.CreateInstance(_uuidof(SoapReader); Reader-Load(_variant_t(IUnknown*)Connector-OutputStream); / load方法还可以用于加载XML文件或字符串将回应信息加载到SoapReader对象之后,就可以用它的RPCResult属性来获取结果。不过,But RPCResult并不直接返回结果,它返回的第一个实体元素,然后用text属性读取该元素属性值:Reader-RPCResult-text 三、举例说明一个简单的SOAP客户端应用:本文示例用做服务器。这个服务器指向Yahoo在线信息。可以在/ve2/ViewListing.po?serviceid=156找到有关细节。下面的代码中要输入一个参数,即Yahoo的用户ID。返回结果为0表示离线,1表示在线。其他细节可参阅::51110/webservices/wsdl/YahooUserPingService.xml 四、参考:The SOAP specification Simple Object Access Protocol (SOAP) 1.1 - W3C Note :/TR/SOAP Microsoft SOAP Toolkit Download :/download/xml/soap/2.0/w98nt42kme/EN-US/SoapToolkit20.exe 五:本文示例的SOAP代码:#include #import msxml3.dllusing namespace MSXML2;#import C:Program FilesCommon FilesMSSoapBinariesMSSOAP1.dll exclude(IStream, ISequentialStream, _LARGE_INTEGER, _ULARGE_INTEGER, tagSTATSTG, _FILETIME)using namespace MSSOAPLib;void main()CoInitialize(NULL);ISoapSerializerPtr Serializer;ISoapReaderPtr Reader;ISoapConnectorPtr Connector;/ 连接服务器Connector.CreateInstance(_uuidof(HttpConnector);Connector-PropertyEndPointURL = :51110/webservices/soapx4/isuseronline.php;Connector-Connect();/ 启动消息机制Connector-PropertySoapAction = uri:allesta-YahooUserPing;Connector-BeginMessage();/ 创建SoapSerializer对象Serializer.CreateInstance(_uuidof(SoapSerializer);/ 与输入流连接Serializer-Init(_variant_t(IUnknown*)Connector-InputStream);/ 制作SOAP信息Serializer-startEnvelope(,);Serializer-startBody();Serializer-startElement(isuseronline,uri:allesta-YahooUserPing,m);Serializer-startElement(username,);Serializer-writeString(laghari78);Serializer-endElement();Serializer-endElement(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 问题学生教育策略
- 人防专业知识培训总结课件
- 餐饮业数字化转型路径探讨
- 黑龙江省安达市四平中学2026届数学七上期末学业质量监测模拟试题含解析
- 2025租房合同协议书范本全书
- 中国银行鄂尔多斯市准格尔旗2025秋招英文面试20问及高分答案
- 工商银行常德市临澧县2025秋招笔试英语阅读选词题专练30题及答案
- 中国银行哈尔滨市依兰县2025秋招笔试金融学专练及答案
- 工商银行安顺市平坝区2025秋招英文面试20问及高分答案
- 邮储银行吉林市桦甸市2025秋招笔试数量关系题专练及答案
- 2025年高考全国卷历史试题真题及答案详解
- 电商行业员工行为规范与工作手册
- 借款合同中国农业银行担保借款合同3篇
- 2025年产业政策调整下人工智能在医疗行业的应用可行性研究报告
- 建筑装修工程质量监督管理制度
- 不锈钢栏杆施工全流程方案
- 2025住院医师规范化培训院内师资培训考核测试题附答案
- 《一定要争气》(第2课时) 课件 小学语文部编版三年级上册
- 血透室护士手卫生
- USP232-233标准文本及中英文对照
- 数据结构(Java语言描述)(第2版)教案全套 张静 单元设计-单元1-8 数据结构与算法 -哈希表
评论
0/150
提交评论