引言

  因为最近事情比较多对wcf的学习也被耽搁了一阵,今天总算是有一点时间,就把前一
段时间学习的内容在这总结一下,当然更重要一个的目的是和大家交流一下,这样才能
学习的更好。

一、WCF的优势

  下面给大家展示一张我在学习过程见到的图片:
 
   

二、WCF中的Endpoint(终结点)?

 首先我们来看看终结点中包括那几个比较重要的部分,也就是我们常说
的“A”“B”“C”,它们分别代表什么?以及它们的作用是什么?
              
  
   Address:一个要和服务端通讯的客户端要做的第一件事情,就是搞清数据要发给
谁?目的地在哪?而Address 正是通过一个Uri 来唯一标示一个WCF 的终节点
(EndPoint)的,它标示了消息发送的目的地。在WCF 数据通讯中,它解决了服务在哪
里的问题,通过这个地址我们就可以找到我们要调用的WCF服务。
  A解决了:Where to locate the WCF Service?
  
  Binding:英文理解为"捆绑,绑定", Binding实现在Client和Service通信的所有底
层细节。如:我们在客户端与服务端传输的时候采用的是什么样的编码,XML?Text?二
进制?...采用哪种传输协议进行传输,TCP?Http?以及采用什么样的机制解决安全问
题,SSL?加密?...
  
  B解决了:How to communicate with service?
  
  Contract:这个东西就是我们常说的契约,它的主要作用是暴漏某个wcf service所
提供的所有的有效方法,它实际上是把每个方法转化成为相对应的消息。
  
  C解决了:What functionalities do the Service provide?

三、应用程序间的通信

  
  首先让大家看一张比较官方的wcf架构图:
              
 上面的图实在是让我们着急啊,这是个什么东西啊?这么复杂,这就是我看到架构图的
第一反应,下面我给大家一种比较简单的解释:
             
 这样图片就比较简单了,简单来说,如果我们客户端和服务端想通信,那么我们的
endpointA和endpointB必须完全符合,同样endpointE和endpointtD也是一样的,这是因
为应用程序之间是靠endpoint来通信的,所以说我们在客户端也必须定义终结点,只有
客户端和服务端的终结点完全符合是才能进行通信。

四、WCF配置文件解读

  
 首先来看一下我们在上一篇博客建立的wcf应用程序中的配置文件。
  
  客户端
<?xml version="1.0" encoding="utf-8"?>
<!--有关如何配置 ASP.NET 应用程序的详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=169433-->
<configuration><system.web><compilation debug="true" targetFramework="4.5" /><httpRuntime targetFramework="4.5" /></system.web><system.serviceModel><bindings><basicHttpBinding><binding name="BasicHttpBinding_IUser" /></basicHttpBinding></bindings><client><endpoint address="http://localhost:60193/User.svc" binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_IUser" contract="ServiceReference.IUser"name="BasicHttpBinding_IUser" /></client></system.serviceModel>
</configuration>
  服务端
<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /></appSettings><system.web><compilation debug="true" targetFramework="4.5" /><httpRuntime targetFramework="4.5"/></system.web><system.serviceModel><behaviors><serviceBehaviors><behavior><!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --><serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/><!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --><serviceDebug includeExceptionDetailInFaults="false"/></behavior></serviceBehaviors></behaviors><protocolMapping><add binding="basicHttpsBinding" scheme="https" /></protocolMapping><serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /></system.serviceModel><system.webServer><modules runAllManagedModulesForAllRequests="true"/><!--若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。--><directoryBrowse enabled="true"/></system.webServer></configuration>

有很多读者也许会感到奇怪,如果这个程序能正常运行的话,那么我们在前面讲的通信

过程岂不是有错?因为我们只是在客户端中发现了endpoint,但是在服务端并没有发
现,这是因为vs在生成配置文件的时候,将服务端的endpoint给隐藏了,当我们手动的
给服务端添加上配置文件以后,程序会正常执行。
 那么为什么没有终结点也会执行呢?答案是我们把WCF寄宿在IIS上,而IIS默认监听的
就是Http协议[B确定了]并且地址也是相对于IIS上的文件地址[A确定了],合同更不用说
了,找到User.svc什么都有了[C确定了],所以在服务端就没有必要显示的写出
system.serviceModel,不信你试试,把服务端的配置文件中system.serviceModel节删
除,程序一样可以运行!服务器端的endpoint确定了,客户端的endpoint自然要和服务
端去对应,所以IDE在生成客户端的配置文件里endpoint写的很详细的,而服务端却没有
endpoint。
 配种文件详解
   

小结

 在项目中初次遇到这个东西的时候非常的痛苦,因为一旦有了错误根本不知道在拿下手
来调试,当请教别人的时候发现错误原来这么简单,后来想了想是因为我们根本一点都
不了解wcf的运行机制以及通信原理,所以在用了一段时间的wcf后决定学习它的原理,
这样我们才能运用的更加灵活,也就是说当我们知道了“是什么”以后,还要知道“为
什么”,这样的学习过程会让我们大大的提高学习效率,如果有什么理解不对的地方,
还请各位读者留言指出!!

WCF基础教程(三)——WCF通信过程及配置文件解析相关推荐

  1. Ogre3D基础教程三

    文档:教程:基础教程:基础教程三 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 目录 [隐藏] 1 先决条件 2 简介 3 从这里开始 4 根对象和场景管理器的创建 4.1 根对象 4.2 场 ...

  2. wcf 基础教程 第一讲 wcf基础知识

    最近工作有点忙,感觉有点累啊,很久没有更新博客了,看到自己的博客访问量日渐下降,我于心不忍,决定还是重新开博来吸引大家的关注.这次要说的不是别的,正是大名鼎鼎的wcf.或者在中间我会穿插MVC的说明, ...

  3. (四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)

    0 前言 本期的实验目的为:使用核心板上的SCI串口通信功能,在电脑端上位机,输入数字0,1,2,3,4,分别控制五个LED亮灭. 1 DSP代码 (注意:查看代码时双击点进去看,否则会内容不全). ...

  4. MySql基础教程(三)——查询训练

    在MySql两轮基础的学习之后,来一波实战演习... 三张表:学生表,课程表,成绩表. 建表详细信息见 MySql基础教程(一) 转载于:https://www.cnblogs.com/zhouerb ...

  5. Wcf 基础教程 服务寄宿之 Windows 服务寄宿

    wcf的寄宿方式多种多样,今天我们一起来探讨一下windows 服务的寄宿方式,其实明白了控制台的寄宿方式,在windows下的寄宿方式也是一样,只不过是操作方式有点区别.编程代码基本是一样的. 我们 ...

  6. 基础教程三(天空,地面和雾化处理)

    简介 在这篇教程里,我们将会一起探索OGRE中的天空,地面和雾化处理.通过这篇教程,您应该明白天空盒(Skybox),天空穹(Skydome)和天空面(Skyplane)的用法和区别.您还会了解不同种 ...

  7. 麒麟子Javascript游戏编程零基础教程三:无处不在的Javascript

    如果你是从大纲那一篇开始看过来的,你在点开这个文章的连接之前,肯定期望说,麒麟子又会在讲正式内容之前BB点什么,这样的话,看起教程来轻松不累还实惠.没错,你猜对了,这就是我的风格. 为什么会把编程教学 ...

  8. eureka hostname作用_SpringCloud基础教程(三)-Eureka进阶

       我的博客:http://www.hao127.com.cn/,欢迎浏览博客!    上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和 ...

  9. yml eureka defaultzone 只生效第一个_SpringCloud基础教程(三)-Eureka进阶

       我的博客:http://www.hao127.com.cn/,欢迎浏览博客!    上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和 ...

最新文章

  1. 如何用TF Object Detection API训练交通信号灯检测神经网络?
  2. tensorflow——openpose代码和原理分析
  3. DNS 隐蔽通道工具资料汇总
  4. windows 下 sublime Text3 做 Python 编辑器
  5. keepalived-1.2.2 编译出错问题解决
  6. mysql教程详解之多表联合查询,MYSQL教程mysql多表联合查询返回一张表的内容实现代码...
  7. fstat、stat和lstat 区别
  8. 星巴克人造肉产品来了,植物牛肉餐品真香?
  9. 算法相关----最大公约数算法
  10. JAVA之多线程概念及其几种实现方法优劣分析
  11. MySQL引擎详解(三)——InnoDB引擎特性
  12. c语言CRC16校验(8005)
  13. 前沿技术讲座感悟以及关于互联网时代前沿技术的个人理解与思考
  14. 三星云服务S Cloud亮相 与苹果iCloud为敌
  15. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK .
  16. 基于UDP的可靠传输——QUIC 协议
  17. Lync问题解决之在Lync客户端中,无法查看到聊天记录
  18. 用python来编写TSP问题
  19. python自动化测试学习路线(从入门到精通)
  20. STM32MP157驱动开发——Linux 音频驱动

热门文章

  1. 利用 edge的朗读功能,写一个python文本转语音的代码
  2. 5种录制Windows 10 音频的方法
  3. iOS开发脚踏实地学习day15-画板
  4. Netty实战:Springboot+Netty+protobuf开发高性能服务器 (附源码下载)
  5. 工业品B2B平台5大要诀,降低企业采购成本捷径
  6. 金蝶云星空和钉钉接口打通对接实战
  7. 消费贷款用途证明怎样提供
  8. MT6771平台简要了解
  9. 美团外卖用户评价文本研究
  10. 股票数据API接口文档说明