创建,测试和使用Web服务的小结

** 下面是我关于Web服务的一点学习小结,当然还是非常的简单粗浅.希望对大家能有所帮助.更欢迎批评指正. **


** 如何创建并且使用 ** ** Web ** ** 服务 **

创建 Web 服务

一般来说有 2 种方式来创建 Web 服务

l 直接编写 Web 服务文件 (*.asmx);

l 首先实现业务对象 , 然后仅仅用 asmx 文件曝露 ;

注意 : *.asmx 是 ASP.NET Web 服务的扩展名 , 并不是所有的 Web 服务都是此方式供用户测试 , 其他厂商提供的 Web 服务往往只是一个 Port.

1. 创建简单 Web服务文件

1@ WebService Language = C# Class = HelloMessage 

using System;

using System.Web.Services;

public class HelloMessage : WebSerive

{

[WebMethod]

public string SayHello(string strName)

{

return “Hello, ” + strName;

}

}


首先需要加入 WebService的编译指令以指明其是一个Web服务,接下来是语言属性,和一个Web服务类的属性class.

注意 : 在一个 asmx 文件中可以有很多类 , 当时只能有一个用于 Web 服务 .

HelloMessage继承了System.Web.Services.WebService这个类.

[WebMethod]这个属性一定要加到想要使用的Web方法前.注意该方法的Modifier必须是public.

希望用户访问的 web 方法一定要是公用的 , 且必须包含属性 [WebMethod]. 含有该属性的方法将把所有调用者都看作是本地的 .

[WebMethod]属性的进一步说明可以参看ASP.NET21.

2. 业务对象法

可以使用已有的业务对象来创建 Web服务,可以大大的降低工作量.当然为了启动服务支持,必须做一些相应的修改.简单来说,需要做三件事:

l 对象必须从 WebService类继承;

l 给要暴露的方法加上 [WebMethod]属性,当然Modifier也必须是public;

l 把返回值是 XXDataReader的改为DataSet,因为前者无法通过XML传输;

注意 : 因为只有从 WebService 继承而来的类才会作为服务暴露给客户 , 所以您可以在同一个文件中创建对象的多个版本 .

然后 ,将业务对象编译成程序集放在相应的目录下.

然后构建暴露业务对象服务的 .asmx文件,非常简单,只需要一句.

1@ WebSerive Class = YourNamespace.YourServiceClass 

测试 Web 服务

对于 .NET 框架建立的 Web 服务而言 , 直接在 IE 浏览器中就可以看到测试界面了 . 比如 :

http://www.hillfree.com/myservice.asmx

一般来说可以看到 Web 服务类和 Web 方法 . 调用 Web 服务可以有三种方法 .( 当然 , 不是所有的 Web 方法都可以用三种方法调用 .):

** 1. ** ** SOAP **

** 2. ** ** HTTP-GET **

** 3. ** ** HTTP-POST **

使用 SOAP 调用服务传递命令和参数 , 可以使用很多基于 XML 的数据类型 .(i.e. Array, class, DataSet, primitive, xmlNode etc.)

但如果使用 HTTP GET 或 HTTP POST, 则只能使用这些协议所能处理的类型 . 一般就是 primitive 基本类型和数组 . 此外 HTTP GET/POST 也只能发送名值对 , 不能传递复杂的数据类型 .

需要查看相关的说明文件时 , 可以输入 :

http://www.hillfree.com/myservice.asmx?WSDL

这是一个 xml 文件 .

使用 Web 服务

使用 Web 服务 , 一般包括三个步骤

1. 发现服务

2. 生成服务的代理

3. 编写客户端程序 , 使用代理调用所需的服务 .

** 发现服务 : **

使用 disco.exe 工具来发现 Web 站点的 Web 服务 , 如 :

disco http://localhost/service/day/fain.disco

** 生成服务代理类 **

使用 wsdl.exe 工具生成 Web 服务代理类 . 如下 :

wsdl http://www.hillfree.com/service.asmx?wsdl

// 如果直接知道 wsdl 的 url, 就不要发现那一步了 .

这样默认生成的是 C# 的类 . 当然 , 如果已经有了 WSDL 文件就可以直接 :

wsdl service.wsdl

接下来 , 您可以直接使用该类文件 , 或者将其编译为程序集使用 .

简要介绍一下代理类 :

生成的代理类包含一个来自 System.Web.Services 的属性 [WebServiceBindingAttribute].

该属性定义了这个类必须使用的接口 .

另外 , 此类是从 SoapHttpClientProtocol 继承而来的 , 它通过 SOAP 和 Web 服务远程通信 . 代理类中包含一个构造函数 , 它设置了 Web 服务的 URL.

Published At
Categories with Web编程
Tagged with
comments powered by Disqus