• WCF Basic(2)服务契约继承



    1 wcf允许接口契约继承,但每个接口必须明确以ServiceContract来声明,不能因为是继承,而忽略了父类的声明.如下声明

    [ServiceContract]
     interface ISimpleCalculator
     {
         [OperationContract]
         int Add(int arg1, int arg2);
     }
     [ServiceContract]
     interface IScientificCalculator : ISimpleCalculator
     {
         [OperationContract]
         int Multiply(int arg1, int arg2);
     }

    2.实现

    class MyCalculator : IScientificCalculator
     {
         public int Add(int arg1, int arg2)
         {
             return arg1 + arg2;
         }
         public int Multiply(int arg1, int arg2)
         {
             return arg1 * arg2;
         }
     }

    3.config配置

    <service name = "MyCalculator">
       <endpoint
          address  = "http://localhost:8001/MyCalculator/"
          binding  = "basicHttpBinding"
          contract = "IScientificCalculator"
      />
     </service>
    4.客户端生成

    [ServiceContract]
     interface ISimpleCalculator
     {
         [OperationContract]
         int Add(int arg1, int arg2);
     }
     class SimpleCalculatorClient : ClientBase<ISimpleCalculator>, ISimpleCalculator
     {
         public int Add(int arg1, int arg2)
         {
             return Channel.Add(arg1, arg2);
         }
         //Rest of the proxy
     }
     
     [ServiceContract]
     interface IScientificCalculator : ISimpleCalculator
     {
         [OperationContract]
         int Multiply(int arg1, int arg2);
     }
     class ScientificCalculatorClient :
                               ClientBase<IScientificCalculator>, IScientificCalculator
     {
         public int Add(int arg1, int arg2)
         {
             return Channel.Add(arg1, arg2);
         }
         public int Multiply(int arg1, int arg2)
         {
             return Channel.Multiply(arg1, arg2);
         }
         //Rest of the proxy
     }


    5.客户端可以指向父级接口,配置文件可以指向同一地址

    <client>
       <endpoint name = "SimpleEndpoint"
          address  = "http://localhost:8001/MyCalculator/"
          binding  = "basicHttpBinding"
          contract = "ISimpleCalculator"
      />
       <endpoint name = "ScientificEndpoint"
          address  = "http://localhost:8001/MyCalculator/"
          binding  = "basicHttpBinding"
          contract = "IScientificCalculator"
      />
     </client>

    6.客户端也可以像接口般继承与调用

    SimpleCalculatorClient proxy1 = new SimpleCalculatorClient(  );
     SimpleCalculatorClient proxy2 = new ScientificCalculatorClient(  );
     ScientificCalculatorClient proxy3 = new ScientificCalculatorClient(  );
  • 相关阅读:
    最长公共子序列
    小测试 炒书
    洛谷P1968 美元汇率
    洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈
    【刷题】【树】【模拟】树网的核
    【刷题】【dp】地精的贸易
    【刷题】【模拟】复制cs
    【刷题】【模拟】3n+1
    【刷题】【dp】中国象棋
    【刷题】【搜索】新数独
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1809591.html
Copyright © 2020-2023  润新知