zoukankan      html  css  js  c++  java
  • Operation Overloading in WCF

    1. Is operation overloading valid in WCF?
        overloading means that two methods with the same name but with different parameters. e.g., the following is a valid C# interface definiton:
        interface ICaculator
        {
            int Add(int x,int y);
            double Add(double x,double y);
        }
            However, operation overloading is not valid if we simplely define such following operationcontract in WCF, it will throw an InvalidOperationException.
        interface ICaculator
        {
         int Add(int x,int y);
         double Add(double x,double y);
        //this is not allowed!
        }
    2 How can we overload operation in WCF manually?
            However, we can manualy enable operation overloading. The trick is using the Name property of OperationContract attribute to alias operation:
        [ServiceContract]
        interface ICaculator
        {
            [OperationContract(Name="AddInt")]
            int Add(int x,int y);
            [OperationContract(Name="AddDouble")]
            double Add(double x,double y);
        }
       -----------------------------------------------------------------------------------------------------------------------------------
        when the client imports the contracts and generates the proxy automatically, the imported operations will have aliased names:
        [ServiceContract]
        public interface ICalculator
        {
        [OperatonContract]
        int AddInt(int x,int y);
        [OperatonContract]
        double AddDouble(double x,double y);
        }
        public partial class CalCulatorClient:ClientBase<ICaculator>,ICaculator
        {
            public int AddInt(int x,int y)
            {
                return Channel.AddInt(x,y);
            }
             
            public double AddDouble(double x,double  y)
            {
                return Channel.AddDouble(x,y);    
            }
        }
        The client can use the generated proxy and contract as is, However, we can still rework those to realize operation overloading on the client side. and the trick is the same as we did on the server side using Name attribute.
        we can re-code like this.
        public interface ICalculator
        {
            [OperationContract(Name="AddInt")]
            int Add(int x,int y);
            [OperationContract(Name="AddDouble")]
            double Add(double x,double y);
        }
         public partial class CalCulatorClient:ClientBase<ICaculator>,ICaculator
        {
            public int Add(int x,int y)
            {
                return Channel.AddInt(x,y);
            }
             
            public double Add(double x,double  y)
            {
                return Channel.AddDouble(x,y);    
            }
        }

    and then, in the client side, we can consume the services.
        CalCulatorClient cal=new CalCulator();
        cal.Add(1,2);//equals 3
        cal.Add(1.1,2.3);//equals 3.4




  • 相关阅读:
    详解vue静态资源打包中的坑与解决方案
    vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除
    axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
    vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址
    vue中watch的用法总结以及报错处理Error in callback for watcher "checkList"
    Vue侦听器watch
    ES6 import 引用文件夹/目录及其处理过程
    Nginx部署前端代码实现前后端分离
    使用XmlInclude解决WebService调用时无法识别子类的异常
    WebServices中Xml的序列化
  • 原文地址:https://www.cnblogs.com/Winston/p/1158380.html
Copyright © 2011-2022 走看看