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

类别:.NET开发 点击:0 评论:0 推荐:

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

 

如何创建并且使用Web服务

 

创建Web服务

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

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

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

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

   

1.     创建简单Web服务文件

<%@ 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文件,非常简单,只需要一句.

<%@ 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 GETHTTP 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 

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

 

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

       wsdl service.wsdl

      

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

 

简要介绍一下代理类:

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

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

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

本文地址:http://com.8s8s.com/it/it45976.htm