软件 > 专题、教程宝典 > 技术开发 >


             微软基于Web计算的框架结构分析

                 胡朝晖(编译)

  三、Web服务的编写

  这里我们可以写一个最简单的Web服务来说明这种新技术的使用,该Web服务以字符串的形式提供当前的服务器的时间(可以精确也可以不精确到秒)。程序是以标准的标记符"<%@...%>"开始的,在该标记符内,WebService告诉ASP.NET该页的代码是作为一个Web服务出现的。Language告诉ASP编译这个页所使用的语言是VB,然后ASP.NET就会使用Visual Basic.NET来进行代码的编译。CLASS属性告诉ASP.NET当前类对象的名称为TimeService。

  具体的代码如下:

<%@ WebService Language="VB" Class="TimeService"%>

 ' 引入名字空间' 需要Web Service
 Imports System
 Imports System.Web.Services
 ' 建立一个新的类,该类必须继承系统提供的基类WebService
 Public Class TimeService : Inherits WebService
  '在类中建立我们所需要的函数,并标记为WebMethods
  Public Function <WebMethod()> GetTime (ShowSeconds as Boolean) As String
  ' 完成该函数的功能:发现当前的时间,格式化,并以字符串形式返回
   Dim dt as DateTime
   If (ShowSeconds = TRUE) Then
    GetTime = dt.Now.ToLongTimeString
   Else
    GetTime = dt.Now.ToShortTimeString
   Endif
  End Function
End Class

  为了允许开发人员使用Web服务来开发客户端应用,需要在设计和开发的时候给他们提供一定的信息。比如,一个Web服务的客户端需要知道Web服务所暴露的方法和相关的参数以及所支持的协议,这个和一个标准的COM所携带的类型库的概念很类似。但是类型库是COM所专用的,而我们所提供的方法应该是和具体的体系结构无关的,所以需要编写一个通用的服务方法的描述。ASP.NET提供了一个可描述的服务,当编译一个WEB服务的时候,ASP.NET提供了一个文件列表用来说明服务所支持的协议,它所提供的方法和参数等等。这个文件是 XML形式编码并使用称为SDL(Service Descriptor Language)的语言进行描述的。可以通过http://WebServer/ specifiedDirectory /TimeService.asmx?SDL这样的形式来得到SDL语言。

  当我们用VB或者VC来编写COM组件的时候,我们一般需要编写一个类型库来描述该COM组件所能提供的功能,而对ASP.NET来说,它能够自动的生成一个SDL文件,也可以先编写一个SDL文件,然后通过系统工具生成一个服务的模板文件。

  一个典型的SDL文件具体内容如下:

<!-- 标准的XML头,描述版本信息和其他相关信息-->
<?xml version="1.0"?>
<!-- 元素serviceDescription是文件的根节点,里面的内容是对Web服务的描述 -->
<!-- 值TimeService表示服务的名称 -->
<serviceDescription name="TimeService">
<!-- 元素serviceDescription包括两个子元素,一个是协议描述,另外一个是文档的schema描述 -->
<!-协议描述用来告诉客户端开发人员我这个Web服务所支持的协议,并告诉他请求和响应数据的编码格式 -->
<!-这里我们描述了HTTP GET的操作,一般有三种方法HTTP GET,HTTP POST和SOAP三种方法 -->
<httpget>
<service>
 <requestResponse name="GetTime" href="http://WebServer/specifiedDirectory/TimeService.asmx/GetTime">
   <request>
   <param name="ShowSeconds"/>
  </request>
  <response>
   <mimeXml ref="s1:string"/>
  </response>
 </requestResponse>
</service>
</httpget>

<!- 这里可以对其他的协议进行描述,比如httpget 和 soap ->
<!- schema表示对服务的抽象定义,它和采用什么协议和它进行通讯无关 ->
<!- 它实际上包含了对服务包含的函数的名称,参数和返回值的表示 ->

<schema>
<element name="GetTime">
 <complexType>
  <element name="ShowSeconds" type="boolean"/>
 </complexType>
</element>
 <element name="GetTimeResult">
  <complexType>
   <element name="result" type="string" nullable="true"/>
  </complexType>
 </element>
</schema>
</serviceDescription>


上一页  1 2 3 4  下一页
【发表评论】【关闭窗口】