下面是我关于Web服务的一点学习小结,当然还是非常的简单粗浅.希望对大家能有所帮助.更欢迎批评指正. 如何创建并且使用 Web 服务 创建 Web 服务 一般来说有 2 种方式来创建 Web 服务 l 直接编写 Web" name="description" />
MILY: 楷体_GB2312; mso-hansi-font-family: 华文中宋">下面是我关于Web服务的一点学习小结,当然还是非常的简单粗浅.希望对大家能有所帮助.更欢迎批评指正.
如何创建并且使用Web服务
一般来说有2种方式来创建Web服务
l 直接编写Web服务文件(*.asmx);
l 首先实现业务对象,然后仅仅用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].含有该属性的方法将把所有调用者都看作是本地的.
[WebMethod]属性的进一步说明可以参看ASP.NET21.
2. 业务对象法
可以使用已有的业务对象来创建Web服务,可以大大的降低工作量.当然为了启动服务支持,必须做一些相应的修改.简单来说,需要做三件事:
l 对象必须从WebService类继承;
l 给要暴露的方法加上[WebMethod]属性,当然Modifier也必须是public;
l 把返回值是XXDataReader的改为DataSet,因为前者无法通过XML传输;
注意:因为只有从WebService继承而来的类才会作为服务暴露给客户,所以您可以在同一个文件中创建对象的多个版本.
然后,将业务对象编译成程序集放在相应的目录下.
然后构建暴露业务对象服务的.asmx文件,非常简单,只需要一句.
<%@ WebSerive Class = YourNamespace.YourServiceClass %> |
对于.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服务,一般包括三个步骤
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.