技术开发 频道

使用Web Services的心得

【IT168 技术文档】

  创建Web服务

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

  1)直接编写Web服务文件(*.asmx);
  2)首先实现业务对象,然后仅仅用asmx文件曝露。

  注: *.asmx是ASP.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].含有该属性的方法将把所有调用者都看作是本地的。

  2)业务对象法

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

1)对象必须从WebService类继承;
2)给要暴露的方法加上[WebMethod]属性,当然Modifier也必须是public;
3)把返回值是XXDataReader的改为DataSet,因为前者无法通过XML传输;

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

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

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

<%@ WebSerive Class = YourNamespace.YourServiceClass %>

  测试Web服务

  对于.NET 框架建立的Web服务而言,直接在IE浏览器中就可以看到测试界面了。一般来说可以看到Web服务类和Web方法。调用Web服务可以有三种方法(当然,不是所有的Web方法都可以用三种方法调用):
SOAP,HTTP-GET和HTTP-POST。

  使用SOAP调用服务传递命令和参数,可以使用很多基于XML的数据类型。(Array,class,DataSet,primitive,xmlNode etc.)但如果使用HTTP GET或HTTP POST,则只能使用这些协议所能处理的类型。一般就是primitive基本类型和数组。此外HTTP GET/POST也只能发送名值对,不能传递复杂的数据类型。

需要查看相关的说明文件时,可以输入类似如下地址:

http://www.yourname.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。

0
相关文章