代码改变世界

WCF Basic(1)-操作重载

  Clingingboy  阅读(432)  评论(0编辑  收藏  举报

     现网上关于WCF所谓是很多,但好书很少.Programming WCF Services 应该算是一本非常好的书。结合书和代码总结一下.

一.服务器端操作重载

1.接口本身支持重载

interface ICalculator
 {
     int Add(int arg1, int arg2);
     double Add(double arg1, double arg2);
 }


2.若将此接口作为服务契约,WSDL规定方法不可重载

以下定义是错误的

//Invalid contract definition:
 [ServiceContract]
 interface ICalculator
 {
     [OperationContract]
     int Add(int arg1, int arg2);
 
     [OperationContract]
     double Add(double arg1, double arg2);
 }

3.可以用OperationContract的Name属性设置方法的别名

[ServiceContract]
 interface ICalculator
 {
     [OperationContract(Name = "AddInt")]
     int Add(int arg1, int arg2);
 
     [OperationContract(Name = "AddDouble")]
     double Add(double arg1, double arg2);
 }

这样客户端就会生成AddInt和AddDouble方法.客户端会生成如下代码

[ServiceContract]
   interface ICalculator
   {
       [OperationContract]
       int AddInt(int arg1, int arg2);
 
       [OperationContract]
       double AddDouble(double arg1, double arg2);
   }
   class CalculatorClient : ClientBase<ICalculator>, ICalculator
   {
       public int AddInt(int arg1, int arg2)
       {
           return Channel.AddInt(arg1, arg2);
       }
       public double AddDouble(double arg1, double arg2)
       {
           return Channel.AddDouble(arg1, arg2);
       }
       //Rest of the proxy
   }


最好是避免这种写法,直接修改方法名

二.客户端操作重载

也可以在客户端指定别名

[ServiceContract]
   interface ICalculator
   {
       [OperationContract(Name = "AddInt")]
       int Add(int arg1, int arg2);
 
       [OperationContract(Name = "AddDouble")]
       double Add(double arg1, double arg2);
   }
 
   class CalculatorClient : ClientBase<ICalculator>, ICalculator
   {
       public int Add(int arg1, int arg2)
       {
           return Channel.Add(arg1, arg2);
       }
       public double Add(double arg1, double arg2)
       {
           return Channel.Add(arg1, arg2);
       }
       //Rest of the proxy
   }
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2009-08-26 Spring.NET学习笔记(6)-基础AOP
点击右上角即可分享
微信分享提示