意图:为了是客户端代理呈现出面向对象的多态的特征
a. 服务端
1.契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继承,注意IAnimal和IDog都是契约,但是我们通常喜欢用最
具体的那个契约来发布服务,因为他最丰富
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Host
{[ServiceContract]public interface IAnimal{[OperationContract]string AnimalSay();}[ServiceContract]public interface IDog : IAnimal{[OperationContract]string DogSay();}
}2.服务的实现
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Host
{public class Service : IDog{public string AnimalSay(){return "动物会叫会走路...";}public string DogSay(){return "小狗汪汪叫...";}}
}3.服务寄宿
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Host
{class Program{static void Main(string[] args){using (ServiceHost host = new ServiceHost(typeof(Service))){host.Opened += delegate{Console.WriteLine("服务已开启...");};host.Open();Console.ReadLine();}Console.WriteLine("服务已关闭...");Console.ReadLine();}}
}4.终结点配置 契约使用IDog的契约来发布服务
<?xml version="1.0" encoding="utf-8" ?>
<configuration><system.serviceModel><behaviors><serviceBehaviors><behavior name="MEX"><serviceMetadata httpGetEnabled="true"/></behavior></serviceBehaviors></behaviors><services>      <service name="WCF.Chapter2.InheritanceProxyChaining.Host.Service" behaviorConfiguration="MEX"><host><baseAddresses><add baseAddress="http://loacalhost:8000/"/></baseAddresses></host><endpoint address="http://localhost:8001/Dog" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceProxyChaining.Host.IDog"></endpoint></service></services></system.serviceModel>
</configuration>
b. 客户端
1.契约继承 只有命名空间不一样而已
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Client
{[ServiceContract]public interface IAnimal{[OperationContract]string AnimalSay();}[ServiceContract]public interface IDog : IAnimal{[OperationContract]string DogSay();}
}
2. 客户端代理链的实现
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Client
{//clientbase<T> T使用最具体的接口public class AnimalClientProxy : ClientBase<IDog>, IAnimal{public string AnimalSay(){return base.Channel.AnimalSay();}}//代理链继承上一级代理实现public class DogClientProxy : AnimalClientProxy, IDog{public string DogSay(){return base.Channel.DogSay();}}
}
3. 本地调用最终呈现出了面向对象的多态,本地化之后就是CLR的内容了,能实现面向对象的特性也是正常的
using System;
using System.ServiceModel;namespace WCF.Chapter2.InheritanceProxyChaining.Client
{class Program{static void Main(string[] args){using (AnimalClientProxy animalProxy = new AnimalClientProxy()){Console.WriteLine(animalProxy.AnimalSay());Console.WriteLine();}using (AnimalClientProxy animalProxy1 = new DogClientProxy()){Console.WriteLine(animalProxy1.AnimalSay());Console.WriteLine();}using (DogClientProxy dogProxy = new DogClientProxy()){Console.WriteLine(dogProxy.AnimalSay());Console.WriteLine(dogProxy.DogSay());Console.WriteLine();}Console.ReadLine();}}
}4.客户端终结点 用的也是最具体的契约
<?xml version="1.0" encoding="utf-8" ?>
<configuration><system.serviceModel><behaviors><serviceBehaviors><behavior name="MEX"><serviceMetadata httpGetEnabled="true"/></behavior></serviceBehaviors></behaviors><services>      <service name="WCF.Chapter2.InheritanceProxyChaining.Host.Service" behaviorConfiguration="MEX"><host><baseAddresses><add baseAddress="http://loacalhost:8000/"/></baseAddresses></host><endpoint address="http://localhost:8001/Dog" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceProxyChaining.Host.IDog"></endpoint></service></services></system.serviceModel>
</configuration>

转载于:https://www.cnblogs.com/kexb/p/7436512.html

wcf服务契约代理链相关推荐

  1. 实现基本的Hello World WCF服务(v4.5)

    介绍 在这篇文章中,我们将从头开始实现一个基本的WCF 4.5服务.我们将通过执行以下步骤来构建HelloWorld WCF服务: 创建解决方案和项目 创建WCF服务契约接口 实现WCF服务 在IIS ...

  2. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  3. WCF服务寄宿IIS与Windows服务 - C#/.NET

    WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...

  4. (2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性

    本章节主要目的:了解[ServiceContract]特性 如前几章的进度,相信已经可以自己编写服务契约以及如何在客户端调用配置好的服务了. 本片主要讲解一下SerivceContract中的几个重要 ...

  5. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    如果一个类型,不一定是数据契约,和给定的数据契约具有很大的差异,而我们要将该类型的对象序列化成基于数据契约对应的XML.反之,对于一段给定的基于数据契约的XML,要通过反序列化生成该类型的对象,我们该 ...

  6. WCF契约的简单介绍(服务契约 数据契约 消息契约)

    本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或 ...

  7. Entity Framework 6 Recipes 2nd Edition(9-7)译-在WCF服务中序列化代理

    9-7. 在WCF服务中序列化代理 问题 从一个查询里返回一个动态代理对象,想要把它序列为一个POCO(Plain-Old CLR Objects)对象. 实现基于POCO实体对象, 在运行时,EF会 ...

  8. WCF服务编程 学习笔记(2)

    (承接上文,只是不好意思,在文中用到的图片自己没有插入.) 12.终结点 服务与地址.绑定以及契约有关.其中,地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容.为便于记忆,我们可 ...

  9. WCF服务编程设计规范(6):队列服务、安全和服务总线

    WCF服务编程设计规范(6):队列服务.安全和服务总线.本节整理队列服务(Queue Servuce).服务安全(Service Security)和服务总线(Service Bus)的设计规范. Q ...

最新文章

  1. 使用Vscode进行远程炼丹
  2. GitLab 8.3.3 发布 开源代码管理
  3. jfinal mysql date,jfinal与mysql数据类型拾掇大全
  4. Linux 运维工具
  5. git指令快捷 idea_IDEA+Git+Gitlab使用详细教程
  6. mysql 四叉树的应用_游戏算法(2):查找优化之四叉树的应用
  7. 3种基于深度学习的有监督关系抽取方法
  8. webpack的简介---webpack工作笔记001
  9. JS中判断某个字符串是否包含另一个字符串的方法
  10. 人工智能帮你文字转为Logo | 机器学习
  11. PAT 1082 射击比赛
  12. IC在測試生產過程的靜電放電(ESD)擊傷及電性過壓(EOS)現象
  13. pyspider 爬取bing壁纸
  14. 腾讯人均月薪7.5w,我这是又被平均了?
  15. 什么是Microsoft Wi-Fi,它将对您有影响吗?
  16. 关于发那科机器人程序偏移功能
  17. mysql查询emoji_mysql怎么搜emoji?
  18. linux下连接window xp共享HP打印机
  19. 计算两个并联电阻的总电阻
  20. 给div元素设置height和overflow:scroll时监听不到滚动事件

热门文章

  1. 【九】Jmeter 实现验证码登录
  2. java 音频 api_Java中的接口
  3. 计算机导论答案解析,计算机导论答案解析内容.doc
  4. Failed to resolve loader: less-loader
  5. 7.25 Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
  6. linux运行库,Linux C 静态库 共享库 运行库
  7. java中自定义泛型类_java 自定义一个泛型类
  8. php 获取 get变量,php – 在Laravel中获取GET“?”变量
  9. Android学习之单选按钮
  10. IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错