第3章 Web服务和NET FrameworkWord文档格式.docx
《第3章 Web服务和NET FrameworkWord文档格式.docx》由会员分享,可在线阅读,更多相关《第3章 Web服务和NET FrameworkWord文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
Toolkit提供了一个本地代理对象来抽象与外部Web服务的所有通信。
开发人员可以把整个代理当作一个内部的组件来使用。
Toolkit对象给外部的Web服务创建和发送有效的SOAP消息,还处理串行化的数据类型,并处理响应消息。
3.1.2提供Web服务
SOAPToolkit能够让开发人员将任意标准的COM对象提供为有效的Web服务。
这也意味着任意客户程序(运行在任意平台上的)可以通过发送和接收有效的SOAP消息来与所提供的COM对象进行通信,这项工作是由SOAP和WSDL标准来完成的。
SOAPToolkit包括了WSDL生成器,该生成器用于生成WSDL文档。
该工具还生成了一个WSML文档,该文档是一个Web服务元语言文档,也是Microsoft独有的标准。
WSML是一种基于XML格式的语言,用于将引入的SOAP请求映射到实际的COM对象方法上。
一旦创建WSDL文件和WSML文件,COM对象就会被正确地加载和部署,该COM对象可以被提供为一个Web服务。
SOAPToolkit允许使用ISAPI监听程序或ASP页监听程序来发布Web服务。
ISAPI过滤器或ASP页监听程序解释传入的SOAP消息。
ISAPI监听程序与Internet信息服务(IIS)相挂钩(hooking),并对所有传入的SOAP请求进行解释。
ISAPI监听程序还将这些传入的SOAP请求针对载入的WSDL文件和WSML文件进行比较,如果两者之间匹配就使用WSML文件来加载正确的COM对象。
ASP页监听程序在VBScript代码中完成的是同样的过程。
图3-1显示了SOAPToolkit是如何解释传入的SOAP消息的,以及它是如何调用COM对象的方法的。
3.1.3使用Web服务
SOAPToolkit提供了一个客户端对象来解释和处理发布在Internet上的WSDL文档。
该对象会动态地查询一个WSDL文档,并获得远程Web服务的方法,从而成为外部Web服务的一个代理对象。
例如,如果一个外部Web服务发布了如下的方法:
voidGetSalesTax(stringState,stringZip);
利用该Web服务,如下的VBScript代码可以和SOAPToolkit一起使用:
SetSoapClient=CreateObject("
MSSOAP.SoapClient"
)
CallSoapClient.mssoapinit("
MsgBox(SoapClient.GetSalesTax("
CA"
"
93933"
))
可见,创建SoapClient对象的方法与创建标准的COM对象的方法是一样的。
mssoapinit()方法接受了WSDL文件的位置,它还接受了几个可选参数。
调用mssoapinit()方法后,Web服务方法被发布为实例化的SoapClient对象的方法。
3.1.4使用SOAPToolkit发布COM对象
下面具体说明SOAPToolkit的工作原理。
该例中,我们以VisualBasic6.0作为开发语言,创建一个简单的COM对象,并展示如何将其发布为Web服务。
首先,创建一个新的VisualBasicActiveXDLL工程。
将Class1对象的名称改为MathComponent(在属性面板中改),并向文件中添加如下代码(在General和Declarations下):
PublicFunctionAddNumbers(ByValnNum1AsInteger,ByValnNum2AsInteger)AsInteger
AddNumbers=(nNum1+nNum2)
EndFunction
保存改工程,并将改工程编译为一个名为Math.dll的DLL文件(方法是在File菜单中选择make命令)。
本COM对象是将两个数字相加并返回相加的结果,这是一个非常简单的COM对象,本例的作用是演示SOAPToolkit的使用情况,而不是介绍如何创建一个功能齐全的COM类。
为了创建WSDL和WSML文件,我们将运行SOAPToolkit。
在SOAPToolkit3.0WSDLGenerator的向导中,在selecttheCOM.dllfiletoanalyze中,选择文件名为Math,COM对象选择Math.dll。
参见图3-1如下。
一旦选择了DLL文件,安装程序要求您从DLL文件中选择希望发布的单个组件。
屏幕上显示的内容如图3-2所示。
通过选中AddNumbers旁边的复选框,我们便选中了由COM对象提供的唯一方法。
接下来用户必须选择部署Web服务的位置。
该内容会被存储到WSDL文件中,以便客户程序通过访问该文件来获取发送SOAP请求的地址。
如图3-3所示。
监听程序URI是客户端Web服务的地址,通过该地址可以访问Web服务并把消息发送给该服务。
需要注意的是,监听程序所在的机器不必和运行WSDL生成器的机器在同一台计算机上。
用户可以从ASP和ISAPI两个选项中选择合适的监听程序。
如果选择ISAPI监听程序,如同在WSML文件中定义的那样,对于传入的SOAP消息使用默认的映射。
ISAPI监听程序是一个被编译过的DLL文件,它提供了比ASP监听程序更好的性能优点。
若使用了ASP监听程序,则会生成一个ASP文件,该文件执行SOAP消息和实际组件之间的映射。
ASP文件的核心代码如下:
SetSoapServer=Application("
MathServer"
SoapServer.SoapInvokeRequest,Response,"
"
该代码的作用是:
从应用程序的高速缓存中加载了SoapServer组件,通过SoapInvoke()方法调用了当前的SOAP请求。
该方法执行了SOAP消息和组件上方法调用间的映射。
最后,安装向导询问保存已生成的WSML文件和WSDL文件的位置。
完成后,便有了一个准备部署到Web服务器的功能齐全的Web服务了。
SOAPToolkit生成了WSDL文档和一个WSML文档。
WSDL文档描述了分布为外部Web服务的COM对象,WSML文档描述了所发布的Web服务和实际执行Web服务的COM对象方法之间的关系。
为了安装这个Web服务,打开Internet信息服务控制窗口,并创建一个新的虚拟目录,将目录命名为soapmath,以后我们会通过工具包向导将WSDL文件放到该目录中。
该目录中包含了最近生成的文件,包括WSML文件、WSDL文件和ASP网页文件。
如图3-4所示。
WSDL文件和WSML文件必须位于IIS的一个虚拟目录中,以便客户机能够访问这两个文件,从而发现Web服务。
如果选择了ASP选项,则所生成的ASP文件也必须放在同样的位置上。
现在,客户机便可以给Web服务器发送SOAP消息了。
那些对Web服务的调用会被ISAPI监听程序或ASP监听程序截取,根据WSML文件中的规定,它们会被发送给组件上的合适方法。
所有使用了SOAP协议设备的客户程序都能够通过使用SOAP协议和HTTP消息发送的方式来访问AddNumbers()方法。
下面我们使用SOAPToolkit的客户端对象创建一个VBScript客户程序,以调用该Web服务。
新建一个文本文件,添加如下代码,最后将文件保存为SoapClient.vbs(VBScript脚本文件)。
双击该文件,将导致Web服务被调用,并通过一个消息框返回响应消息。
这演示了SOAP客户对象的工作原理,也说明了我们可以访问发布为Web服务的COM对象。
SetMathService=CreateObject("
MSSOAP.soapclient"
MathService.mssoapinit("
http:
//10.1.7.181/soapmath/math.wsdl"
MsgBox(MathService.AddNumbers(10,5))
3.1.5何时使用SOAPToolkit
SOAPToolkit是一项利用现有COM组件作为Web服务发布给外界的强大技术。
如果用户继续使用这些技术开发或支持应用程序,SOAPToolkit是可以使用的一个工具,通过SOAPToolkit工具所支持的Web服务也可以使用旧的COM组件。
3.1.6SOAPToolkit概要
对于那些希望发布Web服务,但又不想移植到.NET平台的开发人员来说,SOAPToolkit是一个非常有用的工具。
使用SOAPToolkit,能够使开发人员创建Web服务应用程序,其中所使用的技术和语言与他们在创建COM组件和应用程序时使用的技术和语言一样。
使用SOAPToolkit的最大缺点是,SOAPToolkit不是真正的.NET解决方案。
SOAPToolkit是一个使用传统的基于COM技术的语言来开发Web服务应用程序的强大工具。
3.2ASP.NET
ASP.NET是位于.NETFramework顶层的一组组件和服务。
通过使用ASP.NET开发Web服务,开发人员可以使用.NETFramework所包含的众多类库。
通过使用ASP.NET,也可以访问诸如Application、Context、Server、Session、Site和User这些内部的ASP对象,为Web应用程序提供管理状态,存储设置以及全局和用户高速缓存中的对象的功能。
3.2.1提供Web服务
ASP.NET的Web窗体应用程序非常像标准的ASP3应用程序。
这些ASP.NET应用程序由一组以.aspx为扩展名的文件组成,这些文件包含了应用程序的代码、逻辑和Web站点的各种Web页。
ASP.NET的Web窗体应用程序和ASP3应用程序之间的主要差别是ASP.NET页被编译过了,不像标准的ASP页是由解释过的VBScript代码组成的。
Web服务位于.asmx文件中,其中包含了将它们定义为Web服务的特殊属性。
ASP.NET为开发人员自动生成了WSDL文件和DISCO文件。
ASP.NET还生成一个测试页,该测试页能够使用户通过Web浏览器快速测试Web服务,而无需编写访问代码的客户程序。
3.2.2命名空间
使用ASP.NET创建的Web服务应用程序可以使用所有的.NETFramework命名空间。
下面的4个命名空间支持开发人员构建Web服务解决方案。
●System.Web.Services--由使您可以用ASP.NET和XMLWebservices客户端来创建XMLWebservices的类组成。
●System.Web.Services.Description--由使得您可以通过使用Web服务描述语言(WSDL)来公开描述XMLWebservices的类组成。
●System.Web.Services.Discovery--由使得XMLWebservices客户端能够通过称为XMLWebservices发现的进程在Web服务器上定位到可用XMLWebservices的类组成。
●System.Web.Services.Protocols--由定义在XMLWebservices客户端和用ASP.NET创建的XMLWebservices之间进行通信的过程中在网络上传输数据所使用的协议的类组成。
3.2.3使用Web服务
像SOAPToolkit一样,VisualStudio.NET创建了一个客户端代理对象来管理和抽象与外部Web服务进行的所有通信。
这个客户端对象基于远程Web服务的WSDL文件。
3.2.4.NETRemoting
.NETRemoting表示分布式组件技术的下一代。
.NETRemoting代替了.NETFramework中的DCOM。
.NETRemoting的功能在于可以在所有消息层(如SOAP)和协议(如HTTP或TCP/IP协议)之上使用它。
.NETRemoting的缺点是,它不是一个标准,它只是Microsoft独有的实现工具。
3.2.5何时使用.NETRemoting
通过SOAP和HTTP标准来实例化和调用组件的能力是非常强大的,这便为开发人员提供了构建分布式面向对象系统的能力。
不像大多数的Web服务,作为远程对象发布的组件能够保持像标准分布式组件一样的状态和行为,也能够提供使用SOAP协议和HTTP协议对之进行调用和实例化的能力。
分布式对象需要比HTTP协议提供更好的性能,例如,在一个企业内联网环境中和多个层之间,通过TCP/IP协议来使用远程对象是最佳的选择,这种方式使用了一个专有调用格式将方法调用串行化到一个二进制格式中。
当SOAP协议失去通用性和互操作性之后,二进制协议的性能和安全性在某些环境可能会非常有用。
远程操作的功能之所以强大便在于它的可扩展性上。
只有在带有SOAP协议和二进制格式化程序时,.NETFramework才允许开发人员创建定制格式化程序并将它们插入串行化进程中,远程操作的灵活性非常强大,它允许开发人员容易和高效地创建定制的、健壮的分布式系统。
3.3ALT服务器
ALT服务器是一个设计用来允许C++开发人员提供和使用Web服务的工具。
ALT服务器应用程序是ISAPI过滤器接口的扩展,它能够执行定制的处理,并执行已生成的HTML代码中标记符的替换。
ALT服务器的目标是,为C++开发人员提供一个易用的工具,该工具仍具有和ISAPI过滤器一样的强大功能和全部特征。
ALT服务器是为那些需要对Web服务应用程序具有强大的功能和控制能力的开发人员而设计的一种工具。
ALT服务器允许开发人员使用C++语言构建Web服务,效果就像ISAPI一样,这在性能和可伸缩性方面给了开发人员最大的控制权。
当然,ALT服务器是一项非常复杂的技术,只有那些具有丰富C++开发经验的人员才能够有效使用它。
3.4小结
本章我们介绍了SOAPToolkit,以及它是如何使开发人员不使用.NETFramework便能创建和使用Web服务的。
.NET提供了一组开发Web服务应用程序的强大功能。
ASP.NET是.NETFramework中构建Web服务的最容易的途径。
我们还介绍了.NETRemoting,通过.NETRemoting,用户能够通过任意的传输协议从任意的设备上访问远程组件。
Microsoft提供了.NETFramework中的SOAP协议和TCP/IP协议来实现.NETRemoting。
.NETRemoting体系机制是完全可扩展的,为了包含其他的协议和格式,可以对它进行重构或扩充。