WCF揭秘——共享数据契约

当客户端引用WCF服务时,必须为服务定义一个唯一的命名空间。在默认情况下,这个服务中所用到的类会被导入到这个命名空间内。这样,在不同的服务内引用同一个数据契约时就会遇到一个问题:在客户端,同一个数据契约被导入到不同的命名空间中,无法实现转换。

在以下例子中,PersonService与ContractService同时包括对Person数据契约的引用,但通过PersonService获取到的Person对象,无法作为ContractService中的参数,因为在客户端,它们被引用到不同的命名空间之中,被视为不同的两个类。

   1:      [ServiceContract]
   2:      public interface IPersonService
   3:      {
   4:          [OperationContract]
   5:          Person GetPerson();
   6:      }
   7:   
   8:      public class PersonService : IPersonService
   9:      {
  10:          public Person GetPerson()
  11:          {
  12:              Person person = new Person();
  13:              person.ID = 0;
  14:              person.Name = "Leslie";
  15:              person.Age = 34;
  16:              return person;
  17:          }
  18:      }
  19:   
  20:      [ServiceContract]
  21:      public interface IContractService
  22:      {
  23:          [OperationContract]
  24:          Contract GetContractByPerson(Person person);
  25:      }
  26:   
  27:      public class ContractService : IContractService
  28:      {
  29:          public Contract GetContractByPerson(Person person)
  30:          {
  31:              Contract contract=ContractManager.GetContractByPerson(person);
  32:              .....
  33:              return contract;
  34:          }
  35:      }
  36:   

从Visual Studio 2008开始,系统为客户提供了“共享数据契约”这一功能。首先把需要共享的数据契约包含在一个程序集中,生成一个Model.dll文件。在客户端引用这一程序集,在添加服务引用时,选择"高级"—>"重新使用引用的程序集中的类型(R)"—>"重新使用所引用的指定程序集中的类型(S)",然后选择Model。这样,在客户端就会同时使用Model.dll中的Person对象。

QQ截图20110723213922

 

相关文章

简单的WCF开发实例

使用AJAX+WCF进行页面开发

共享数据契约

可靠性会话功能

自定义绑定

对JAVA与.NET开发有兴趣的朋友欢迎加入QQ群:162338858 点击这里加入此群

cnblogs博客园: http://www.cnblogs.com/leslies2/
csdn博客: http://blog.csdn.net/leslies2
原创作品,转载时请注明作者及出处



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值