创建Web Service

由于.net下的web service实现是基于Asp.net ,这句话的意思就是说在web service的方法中你可以使用.net framework中的任何代码.

根据前篇文章的说明,Web service是支持跨平台的,也就是方法的参数与返回值这些需要与Web service客户端进行交互的地方,就不能使用.net特有的类型如FileStream,EventLog等.可以使用的类型必须符合xml Schema规范中定义的类型,主要由如下几种

  1. 基本类型:数字,字符串,int,float,datetime.byte,bool,decimal等
  2. 第一点的数组类型
  3. 定制类型和结构:必须基于第一点和第二点的类型.如 public class User{public string UserName{get;set} public string Password{get;set;}
  4. 枚举类型
  5. XmlNode
  6. 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" %>

方法二注意点:

  1. 在类库工程中如果要用到WebMethod Attribute(我把Attribute翻译为特性,有些人喜欢称之为属性,以后的文章都统称这为特性) ,当然需要引用一个程序集System.Web.Services
  2. 在asmx文件中的类注意要加上命名空间,道理很明显,因为同一个dll或者不同dll中可能存在同名的类名.
  3. 部署的时候记得把类库工程生成的dll放到bin目录下面.

关于此方法值得继续谈论一下.在很多原本不支持web service的项目中,可以开发一个工具一次性把所有的BLL层代码转为支持web service,至于如何实现这样的工具,比如可以动态创建原来BLL代码的代理类并动态编译.当然需要注意一下web service支持的类型等问题.

方法三:

利用visual studio来开发web service,步骤如下:

  1. 建一个asp.net web service application visual studio 2008已经自带此项目模板,但不是非要建立这样的模板,web site ,web application都是可以的..
  2. 用上面的步骤建立的工程默认自带一个service1.asmx文件,而且有个示例代码,代码如下

public class Service1 : System.Web.Services.WebService
{

[WebMethod]
public string HelloWorld()
{
return "HelloWorld";
}

}

注意:此类继承于WebService ,这个不是必须的,前2种方法已经证明这一点.继承与这个类只不过多了一些方法,属性可以用(主要是asp.net中的一些对象),比如会话相关信息等.

posted @ 2010-01-11 13:32  CodeWorker  阅读(555)  评论(0编辑  收藏  举报