转贴(电脑报):Web Service开发实用指南(图略)

Web Service开发实用指南  
  罗珊 附录文章

  Web Service平台是一套标准,它定义了应用程序如何在Web上实现交互性操作。你可以用你喜欢的任何语言,在任何平台上编写Web Service,只要我们可以通过Web Service标准对这些服务进行查询和访问即可。

  本文选用VB.NET平台,向你讲述Web Service开发的方法与技巧。

  一、Web Service平台的组成技术
  1.什么是Web Service
  从表面上看,Web Service是一个应用程序,一个能够通过Web进行调用的API(Application Programming Interface,应用编程接口)。即是说,你能够用编程的方法,通过Web调用,来实现某个功能的应用程序。

  从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。

  Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行交互操作。它可以使用标准的Internet协议,将功能体现在Internet和企业内部网上。

  2.Web Service平台的组成技术
  通常情况下,Web Service由以下3个主要技术部分组成:

  (1)XML和XSD

  XML (Extensible Markup Language,可扩展的标记语言)是Web Service平台中表示数据的基本格式。XML解决了数据表示的问题,但它没有定义标准的数据类型,更没有定义怎样去扩展数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现交互操作都是很重要的。W3C(万维网联盟)制定的XML Schema(XSD)即是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web Service平台就是用XSD作为其数据类型系统的。当你用某种编程语言(如VB.NET或C#)来编写一个Web Service应用程序时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。

  (2)SOAP

  Web Service应用程序编写好以后,我们需要去调用它,SOAP(Simple Object Access Protocol,简单对象访问协议)提供了标准的RPC(远程过程调用)方法来调用Web Service。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP基于XML和XSD。

  (3)WSDL

  WSDL(Web Service Description Language,Web服务说明语言)是一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为其基于XML,所以WSDL既是机器可阅读的,又是开发者可阅读的。一些最新的开发工具既能根据你的Web Service生成WSDL文档,又能导入WSDL文档,生成调用相应的Web Service代码。

  3.Web Service工作流程
  Web Service的工作流程如图1所示。

 

  在使用Web Service时,包括3个阶段的通信,在图1中,列出了3个阶段的通信流程。第1阶段的通信被称为发现阶段(Discover),其主要作用是确定在服务器上有哪些服务。

  经过发现阶段我们一般可以确定服务器一共提供了哪些服务。在使用这些服务之前我们还必须知道这些服务支持什么样的界面。所以Web Service第2阶段的通信就是发送请求获得Web Service描述语言WSDL。

  第3阶段的通信主要是向Web Service服务器发送信息服务请求,并等待服务器的应答。

  二、.NET中关于Web Service的技术要素
  利用.NET中专为Web Service开发的类接口,我们可以轻松地创建一个Web Service程序。下面介绍一些主要的技术要素。

  1.Web Service 处理指令
  Web Service处理指令为ASP.NET环境提供了必要的信息,如实现XML Web Services功能的类。以下是.asmx文件中Web Service处理指令的示例:

  <%@ WebService Language="vb" Codebehind="Service1.asmx.vb "Class="WebService1.Service1" %>

  其中,Language属性指示开发XML Web Services所使用的编程语言。可以使用任何与.NET兼容的语言(如VB.NET或C#)来创建XML Web Services。与.asmx页关联的支持代码文件由Codebehind属性来指示。Class属性指示支持代码文件中用来实现XML Web Services功能的类。

  注意:要在.NET的“解决方案资源管理器”中查看.asmx文件的内容,请用右键单击.asmx文件,然后单击“打开方式”命令。在“打开方式”对话框中,选择“源代码 [文本] 编辑器”选项,然后单击“打开”按钮即可。

  2.System.Web.Services.WebService类
  System.Web.Services.WebService类定义了XML Web Services的可选基类,并提供了直接访问常见ASP.NET对象(如应用程序和会话状态的对象)的权限。默认情况下,使用Visual Studio.NET以托管代码的形式创建的XML Web Services继承此类。XML Web Services可继承此类以获得访问ASP.NET固有对象(如Request和Session)的权限。

  如果XML Web Services没有继承此类,也可System.Web.HttpContext.Current访问ASP.NET固有对象。实现XML Web Services的类必须是公共的,且必须有一个公共的默认构造函数(不带参数的构造函数)。这样,ASP.NET就能够创建XML Web Services类的实例以处理传入的XML Web Services请求。

  3.WebService属性
  每个XML Web Services都需要唯一的命名空间,它可使客户端应用程序区分出可能使用相同方法名称的XML Web Services。在Visual Studio .NET中创建的XML Web Services 的默认命名空间是“http://tempuri.org”。尽管命名空间类似于典型的URL(统一资源标识符),但在Web浏览器中是不能查看的,它只是一个唯一标识符。WebService属性主要包括以下几种属性:

  (1)Description属性

  此属性的值包含描述性消息,此消息将在XML Web Services的说明文件(例如服务说明和服务帮助页)生成后显示给XML Web Services的潜在用户。

  (2)Name属性

  此属性的值包含XML Web Services的名称。默认情况下,该值是实现XML Web Services的类的名称。Name属性标识XML Web Services的XML限定名称的本地部分。Name属性也用于在服务帮助页上显示XML Web Services的名称。

  (3)Namespace属性

  此属性的值包含XML Web Services的默认命名空间。XML命名空间提供了在XML文档中创建名称的方法,该名称可由URL标识。使用XML命名空间,可以唯一标识XML文档中的元素或属性。因而,在XML Web Services的服务说明中,Namespace被用作与XML Web Services直接相关的XML元素的默认命名空间。如果不指定命名空间,就使用默认命名空间“http://tempuri.org”。

  以下示例代码说明了WebService属性的用法:

  <WebService(Namespace:="http://MyServer/MyWebServices/", _

   Description:="此处可以放一些描述性文字。",

   Name:="MyFavoritesService")> _

  Public Class Service1

   Inherits System.Web.Services.WebService

   ' 实现代码

  End Class

  4.WebMethod属性
  以托管代码创建XML Web Services时,通过在Public方法声明之前放置WebMethod属性可以指定在XML Web Services中可用的方法。Private方法不能充当XML Web Services的入口点,尽管它们可以采用相同的类,并且XML Web Services代码可以调用它们。WebMethod属性必须应用到可用作XML Web Services一部分的每种公共方法中。

  WebMethod属性包含配置XML Web Services行为的几个属性。例如,可以使用此属性在相关服务帮助页提供一个简短说明。WebMethod属性提供以下属性:

  (1)BufferResponse属性

  当此属性设置为True(默认设置)时,ASP.NET将响应向下发送到客户端之前先缓存整个响应。缓存是一种非常有效的方法,可以通过减少辅助进程和Internet信息服务(IIS)进程之间的通信来提高性能。当设置为False时,ASP.NET会将响应缓存在16KB的区块中。通常,只有在不想一次将响应的全部内容都缓存在内存中时,才将此属性设置为False。例如,正在写一个多项流出数据库的集合。除非另行指定,否则默认值为True。

  (2)CacheDuration属性

  此属性的值指定ASP.NET缓存每个唯一参数设置结果所需的秒数。除非另行指定,否则默认值为0,此设置将禁用结果缓存。

  (3)Description属性

  此属性的值提供了对XML Web Services方法的说明,显示于服务帮助页中。除非另行指定,否则默认值为空字符串。

  (4)EnableSession属性

  当此属性设置为False(默认设置)时,ASP.NET将无法访问XML Web Services方法的会话状态。当设置为True时,XML Web Services可以直接从HttpContext.Current.Session访问会话状态集合;在继承了WebService基类的情况下,也可以使用WebService.Session属性进行访问。

  (5)MessageName属性

  此属性的值使XML Web Services能够使用别名来唯一标识重载的方法。除非另行指定,否则默认值为方法名。当为MessageName指定值后,结果SOAP消息会反映出此名称而不是实际的方法名。

  (6)TransactionOption属性

  此属性的值指定XML Web Services方法是否可以作为事务的根对象。虽然可以将TransactionOption属性设置为TransactionOption枚举类型的任意值,但是XML Web Services方法仅有两种可能行为:它不参与事务(Disabled、NotSupported和Supported),或是创建新事务(Required和RequiresNew)。除非另行指定,否则默认值为TransactionOption.Disabled。要使用此属性,需要向System.EnterpriseServices.dll添加一个引用。此命名空间包含的方法和属性,提供了可在COM+服务中找到的分布式事务模型。System.EnterpriseServices.ContextUtil类允许你使用SetAbort或SetComplete方法设置该事务。

  以下示例代码说明了WebMethod属性的用法:

  Public Class Service1

   Inherits System.Web.Services.WebService

   <WebMethod(BufferResponse:=False, _

       CacheDuration:=60, _

       Description:="一些描述性的文字",

       MessageName:="RetrieveData")> _

   Public Function GetBigChunkOfData()As DataSet

   '实现代码

   End Function

  End Class

  5.XML Web Services发现
  XML Web Services发现是对XML Web Services说明进行定位和询问的过程,是访问XML Web Services的基本步骤。通过发现进程,XML Web Services客户端能够在设计阶段了解某个XML Web Services是否存在,它的功能如何,以及如何正确与它进行交互操作。

  然而,实现XML Web Services的Web站点不需要支持该发现进程,而是由另一个站点负责说明服务(如XML Web Services目录)。另外,可能没有一个公开的方法可用来查找服务,例如在创建专用服务时。XML Web Services发现主要包括以下内容:

  (1)静态发现(.disco)

  可以通过发布.disco文件(一个XML文档,包含指向其他发现文档、XSD方案和服务说明的链接)来启用XML Web Services的程序发现。使用ASP.NET自动创建的XML Web Services能够提供生成的发现文档。例如,要访问名为Service1.asmx(本地计算机中WebService1项目的一部分)的XML Web Services发现文档,可使用以下URL:

  http://localhost/WebService1/Service1.asmx?DISCO

  以下示例显示了发现文档的结构:

  <?xml version="1.0"?>

  <disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco"

  xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl">

  <wsdl:contractRef ref="

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值