首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

那些年,小弟我们一起学WCF-(2)wcf服务契约

2012-09-17 
那些年,我们一起学WCF--(2)wcf服务契约这一节,大家共同来学习下WCF服务的契约设计,服务契约其实就是一个接

那些年,我们一起学WCF--(2)wcf服务契约

       这一节,大家共同来学习下WCF服务的契约设计,服务契约其实就是一个接口,描述了客户端可以进行哪些操作。这一节主要探讨两个问题

            1.服务契约设计

             2.契约重载

 

    1.服务契约

       先来说下服务契约,服务契约就是服务器暴露一些方法,供远程客户端进行调用,如果要定义服务契约,先定义一个接口和接口方法,在接口上面使用ServiceContract进行标记,然后在方法上面使用OperationContract进行标记,只有用ServiceContract和OperationContract标记的接口才能被远程调用,

     如下面的IApple接口服务

 [ServiceContract]    public   interface IApple    {        [OperationContract]        string OrderApple();        [OperationContract]        string GetApple();    }
 public class Apple:IApple    {        #region IApple 成员        public string OrderApple()        {            return "我订购苹果!";        }        public string GetApple()        {            return "我得到了苹果!";        }        #endregion    }

  以上我们定义了一个完整的契约, 接下来我们使用上面定义的服务契约创建一个服务端项目,使用控制台程序

     APP.CONFIG文件如下

<?xml version="1.0" encoding="utf-8" ?><configuration>  <system.serviceModel>    <services>      <service name="ConsoleServer.Apple" behaviorConfiguration="beconfig">        <endpoint address="http://localhost:8003/ConsoleServer.Apple" contract="ConsoleServer.IApple" binding="wsHttpBinding" >        </endpoint>      </service>    </services>    <behaviors>      <serviceBehaviors>        <behavior name="beconfig">          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8003/ConsoleServer.Apple"/>        </behavior>      </serviceBehaviors>    </behaviors>  </system.serviceModel></configuration>

 启动服务器端

 class Program    {        static void Main(string[] args)        {            ServiceHost host = new ServiceHost(typeof(Apple));            host.Open();            Console.WriteLine("服务器端启动成功....");            Console.ReadLine();        }    }

 

2.生成客户端代理

     以上服务端项目创建完成后,我们使用SvcUtil.exe工具生成客户端代理

      首先我们打开命令行工具,然后使用命令生成客户端代理和配置文件,指定生成文件的位置为C盘。

     命令如下:

      SvcUtil /language:c# /out:c:\Client.cs /config:c:\Apphttp://localhost:8003/ConsoleServer.Apple

     如下图:

     那些年,小弟我们一起学WCF-(2)wcf服务契约

     然后创建一个客户端项目,把刚刚生成的代理类和配置文件拷贝到客户端项目里面,接着在客户端引用system.servermodel调用服务器端的方法。

    客户端启动代码如下:

    

 class Program    {        static void Main(string[] args)        {            using (ChannelFactory<IApple> channelFactory = new ChannelFactory<IApple>("WSHttpBinding_IApple"))            {                IApple apple = channelFactory.CreateChannel();                string result = apple.GetApple();                Console.WriteLine("客户端获取信息如下:");                Console.WriteLine(result);                Console.ReadLine();            }        }

  至此,我们服务契约已经设计完成,并成功被客户端调用。效果图如下

    那些年,小弟我们一起学WCF-(2)wcf服务契约

 

    那些年,小弟我们一起学WCF-(2)wcf服务契约

   3.契约重载

     在C#等面向对象程序中,方法名称相同,参数不同的方法我们称之为重载,但是WCF属于面向服务的设计方式,不允许出现方法名称相同,参数不同的方法,

这样在运行时,如果调用了这个方法客户端会报错。所以WCF牺牲了一些面向对象的设计思想,但是我们可以通过为方法设置别名,来进行重载。

通过使用OperationContract设置方法别名,如下面的这个契约,定义了名称相同的两个方法ShopApple

 

 [ServiceContract]    public   interface IApple    {        [OperationContract]        string OrderApple();        [OperationContract]        string GetApple();        [OperationContract(Name="ShopB")]        string ShopApple();        [OperationContract(Name="ShopA")]        string ShopApple(string msg);    }

这样客户端在调用的时候就使用ShopA和ShopB进行调用。

  

  DEMO下载:http://download.csdn.net/detail/zx13525079024/4563225

热点排行