您的位置:首页 > 其它

WCF学习-构建WCF服务(3)

2014-04-25 23:13 225 查看
前面已经很清楚的说明了,一个WCF应用程序集需要三部分组成:WCF服务程序集、宿主程序、客户端;下面我们将入手构建一个WCF服务程序,也就是实现第一步;

在回顾下,前面已经指出:应用程序中定义的WCF契约接口被称为服务契约,实现了这些接口的类或结构称作服务类型;也就是说构建一个WCF服务类需要:一个契约接口以及实现该接口的类;下面将正式使用VS2010构建一个WCF服务契约(接口)以及WCF服务类型(接口实现类);

步骤一:首先使用VS2010建立一个空项目,解决方案名称为WcfWerviceTest,项目名称为CalServiceLib,这里我们就是建立一个简单计算的服务库;建好的工程如下:

(1)添加System.ServiceModel.dll程序集的引用

(2)添加服务契约接口文件ICalService.cs

(3)添加服务类型类文件CalService.cs,这个文件就是实现了接口ICalService,类CalService就是一个WCF的服务类型;

 
 
 

  
 

步骤二:创建服务契约和服务

服务契约

服务

using System.ServiceModel;

 

namespace CalServiceLib

{

    [ServiceContract]

    public interface ICalService

    {

        [OperationContract]

        double add(double x, double y);

        [OperationContract]

        double sub(double x, double y);

        [OperationContract]

        double mul(double x, double y);

        [OperationContract]

        double div(double x, double y);

    }

}

using System.ServiceModel;

 

namespace CalServiceLib

{

    public class CalService:ICalService

    {

        public double add(double x, double y)

        {

            return x + y;

        }

        public double sub(double x, double y)

        {

            return x - y;

        }

        public double mul(double x, double y)

        {

            return x * y;

        }

        public double div(double x, double y)

        {   

            return x / y;

        }

    }

}

 
 
 

需要注意的是都要引入using System.ServiceModel;命名空间。还有由于我们是从空工程建立的,所以要将程序的输出类型选择为类库;然后,如果编译成功的话,我们的第一个WCF服务库就建立成功了;

说明:(1)[ServiceContract]特性和[OperationContract]特性

为了使接口能一般接口能为WCF所提供的服务,则必须使用[ServiceContract]特性来修饰一个接口,这也是一般接口和契约接口不同的地方;在WCF框架中使用的方法必须使用[OperationContract]特性来修饰;当然这些特性也有各自的属性,具体到应用时在分析;

(2)其实构建WCF服务类型时并不需要定义接口即服务契约,可以直接将[ServiceContract]特性和[OperationContract]特性应用到服务类型上;虽然这种方法是可行的,但是显示定义个接口类型去表示服务契约还是有很多好处,最明显的好处就是给定的服务接口可以被应用到多个服务类型,从而获取到高度的多态性;另外一个好相处服务契约接口通过接口继承实现新的契约;

如下面代码就是作为契约的服务类型:

 

    [ServiceContract]

    public class calservice

    {

        [OperationContract]

        string GetData(int value){}

    }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: