创建Web Service
由于.net下的web service实现是基于Asp.net ,这句话的意思就是说在web service的方法中你可以使用.net framework中的任何代码.
根据前篇文章的说明,Web service是支持跨平台的,也就是方法的参数与返回值这些需要与Web service客户端进行交互的地方,就不能使用.net特有的类型如FileStream,EventLog等.可以使用的类型必须符合xml Schema规范中定义的类型,主要由如下几种
- 基本类型:数字,字符串,int,float,datetime.byte,bool,decimal等
- 第一点的数组类型
- 定制类型和结构:必须基于第一点和第二点的类型.如 public class User{public string UserName{get;set} public string Password{get;set;}
- 枚举类型
- XmlNode
- DataSet DataTable
而关于泛型的支持有点特殊,留待后续的文章中.暂时只要知道不支持泛型方法如public List<T> GetUsers<T>(),但支持这种形式public List<User> GetUsers()
创建Web Service:
我一向认为Microsoft的工作做得很出色,导致程序员越来越傻瓜化,所以创建Web Service的时候,我会从最基本的说起.
方法一:
由于.net下的Web Service实现是asmx的扩展名,所以第一个步骤就是建立一个asmx文件,完全可以以记事本来创建,代码如下:
<%@ WebService Language="C#" class="MyFirstWS" %>
using System.Web.Services;
public class MyFirstWS
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
这个时候你的第一个Web service就已经创建完成,只要部署一下,马上就可以访问了.当然这种方式完全是学院派的做法,实际是不会有项目是这种做法的.
方法二:
建立一个类库工程,编译成dll,代码如下:
using System.Web.Services;
namespace David.WSTest
{
public class MySecondWS
{
[WebMethod]
public string HelloWorld()
{
return "Hello World Second";
}
}
}
建立一个asmx文件,写上如下的代码<%@ WebService Language="C#" class="David.WSTest.MyFirstWS" %>
方法二注意点:
- 在类库工程中如果要用到WebMethod Attribute(我把Attribute翻译为特性,有些人喜欢称之为属性,以后的文章都统称这为特性) ,当然需要引用一个程序集System.Web.Services
- 在asmx文件中的类注意要加上命名空间,道理很明显,因为同一个dll或者不同dll中可能存在同名的类名.
- 部署的时候记得把类库工程生成的dll放到bin目录下面.
关于此方法值得继续谈论一下.在很多原本不支持web service的项目中,可以开发一个工具一次性把所有的BLL层代码转为支持web service,至于如何实现这样的工具,比如可以动态创建原来BLL代码的代理类并动态编译.当然需要注意一下web service支持的类型等问题.
方法三:
利用visual studio来开发web service,步骤如下:
- 建一个asp.net web service application visual studio 2008已经自带此项目模板,但不是非要建立这样的模板,web site ,web application都是可以的..
- 用上面的步骤建立的工程默认自带一个service1.asmx文件,而且有个示例代码,代码如下
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "HelloWorld";
}
}
注意:此类继承于WebService ,这个不是必须的,前2种方法已经证明这一点.继承与这个类只不过多了一些方法,属性可以用(主要是asp.net中的一些对象),比如会话相关信息等.