• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:16来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

使用ATL AppWi z a r d创建项目,使用Object Wi z a r d添加一个简单对象,并且确保选中了标有
“Support IS u p p o r t E r r o r I n f o”的复选框。然后,使用C l a s s Vi e w添加E x c h a n g e ( )方法。
下面是O p e r a . h头文件:
程序清单1 8 - 5
第18章实例研究4—SOAP使用771 下载
向导和C l a s s Vi e w会自动生成一些代码,上面突出显示的代码是你要添加的。正如你所看到
的,我已经增加了一两个辅助方法,以及一个i n t型的m _ s o c k用于存放T C P / I P套接字标识符,并
且引用了M S X M L库,以便使用M i c r o s o f t实现的D O M。另外,我们还要在O p e r a C l i e n t . c p p文件
的D l l M a i n中添加几行代码:
772使用XML 高级编程
下载
程序清单1 8 - 6
以上突出显示的代码是为了保证T C P / I P的正常工作。当客户端应用程序开始使用D L L时,
我们要发布命令,启动Wi n S o c k(指定版本1 . 1),当它断开时清除Wi n S o c k。如果愿意的话,你
也可以用Wi n I n e t替代Wi n S o c k。
如前所述, E x c h a n g e ( )方法执行与服务器的S O A P交换。典型的交换(比如:设置
C u s t o m e r I D属性)可能包含以下从客户到服务器的信息:
程序清单1 8 - 7
以及从服务器到客户的信息:
程序清单1 8 - 8
第18章实例研究4—SOAP使用773 下载
3. Exchange()方法
下面我们来介绍E x c h a n g e ( )方法:
程序清单1 8 - 9
如果尚未与服务器建立连接,我们将通过一个辅助方法建立连接。稍后将介绍该方法。现
在,让我们看看应用程序引用了哪个方法调用,然后从VA R I A N T 中提取参数,构造
M e s s a g e Ty p e头:
程序清单1 8 - 1 0
774使用XML 高级编程
下载
你并不指望有一个完整的实现,不是吗?空白和字符串就足以说明问题。我们将添加其他
头(包括最重要的C o n t e n t Ty p e头),完成上传操作:
程序清单1 8 - 11
下面我们来交换请求和应答。值得注意的是,如果这是一个实际的应用程序,必须设置计
时器,以防与服务器之间的连接中途中断。
程序清单1 8 - 1 2
检查套接字没有被服务器关闭:
程序清单1 8 - 1 3
第18章实例研究4—SOAP使用775 下载
现在,分析一下应答。首先去除第一行,我们对此不是特别感兴趣:
程序清单1 8 - 1 4
下面是两个标记。仅当我们获得了一个有效的S O A P调用应答必需具备的所有头,才设置第
一个标记。如果服务器返回“ Connection: close”头,则设置第二个标记。如果这个标记没有被
置位,将保持连接处于打开状态。这是因为我们在P a t a g o n i a生成订单,而且不希望失去它。那
里保存了状态信息。实际上,我不得不承认这种方式不太恰当,我也曾试图修改应用程序,使
得它能够在客户端生成订单,在交易的最后才发送给服务器。这样,就能够在断线的情况下完
成所有操作。然而,我的目标是尽可能仿效原来的D C O M应用程序,除了要剔除D C O M有线协
议所带来的额外负担。我将这项任务作为练习留给你,希望你能够使应用程序在完全无连接的
情况下执行操作。如果读者强烈要求,我会在我的We b站点w w w. j p a s s o c . c o . u k上发布无连接版
本。
程序清单1 8 - 1 5
776使用XML 高级编程
下载
现在,我们知道已经获得了所需的内容,得到了真正的S O A P应答,因此下面将调用一个辅
助方法处理它:
程序清单1 8 - 1 6
如果已经完成订单,将关闭套接字;否则,保持其打开状态,留待下一个调用使用(如果
释放对象,套接字也将关闭)。
程序清单1 8 - 1 7
4. 辅助方法
下面我们将介绍几个辅助方法。首先是完成连接功能的方法:
程序清单1 8 - 1 8
第18章实例研究4—SOAP使用777 下载
熟悉T C P / I P编程的人对于以上代码不会感到陌生。其中大部分代码用于将U R L和端口号转
换为适于连接的服务器结构。注意,我们连接到服务器的8 0端口—S O A P通过这种方式欺骗防
火墙,使之认为我们正在进行We b操作。当S O A P被广泛接受之后,它很可能有自己的特定的端
口,以便网络管理人员能够区分出它,但是目前,我们仍然使用端口8 0。
断线方法更加简单:
程序清单1 8 - 1 9
在结束对O P E R A客户的讨论之前,我们还要分析另一个辅助方法P r o c e s s C o n t e n t ( )。它负责
处理来自服务器的应答。
毫无疑问,我没有必要亲自解析应答,因为M i c r o s o f t的XML DOM提供了许多相当出色的
778使用XML 高级编程
下载
C O M对象。在开始处理之前,首先看一下应答可能具有的形式。以下是来自O P E R A服务器的应
答的例子:
程序清单1 8 - 2 0
现在,我们开始解析它:
程序清单1 8 - 2 1
顺便说一下,如果你对性能非常关注,要考虑避免使用D O M,特别是考虑到我们在此使用
的X M L结构不是相当复杂。如果你对采用非D O M方式感兴趣,可以参考后面介绍的L i n u x实现。
以下代码用于提取方法名称(虽然在本例中我们并不需要使用它):
现在我们提取第一个子节点:
我们对于标记不感兴趣(因为要假设它是r e t u r n),因此直接获取其中的文本:
要返回给发出调用的应用程序的结果就是我们从X M L应答中获得的内容:
以上就是我们的客户C O M对象。在讨论产生调用的应用程序之前,先看一下服务器的操作。
第18章实例研究4—SOAP使用779 下载
18.2.2 OPERA服务器
我们的服务器必须接收和解释通过T C P / I P发送的H T T P命令。简而言之,它应该看上去像个
We b服务器。因此,我们要编写一个We b服务器,是吗?我认为每个人一生之中至少应该有一次
这样的经历,因为它有助于理解许多We b底层的技术。准备好了吗?我们开始吧!
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程下(76)