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

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: WCF基础教程(三)——WCF通信过程及配置文件解析

引言


因为最近事情比较多对wcf的学习也被耽搁了一阵,今天总算是有一点时间,就把前一

段时间学习的内容在这总结一下,当然更重要一个的目的是和大家交流一下,这样才能

学习的更好。


一、WCF的优势


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


20150813112717853.gif


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


首先我们来看看终结点中包括那几个比较重要的部分,也就是我们常说

的“A”“B”“C”,它们分别代表什么?以及它们的作用是什么?


20150814104451640.gif


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架构图:

 20150814110044460.gif


上面的图实在是让我们着急啊,这是个什么东西啊?这么复杂,这就是我看到架构图的

第一反应,下面我给大家一种比较简单的解释:


20150814110332928.jpg

这样图片就比较简单了,简单来说,如果我们客户端和服务端想通信,那么我们的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。


配种文件详解


20150814112510644.gif


小结


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

目录
相关文章
|
25天前
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
134 1
|
27天前
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
30 2
|
11天前
|
缓存 负载均衡 应用服务中间件
深入解析Nginx配置文件
Nginx是一个高性能HTTP服务器和反向代理,其配置文件`nginx.conf`包含全局、事件、HTTP、Server和Location块。全局块设置如用户和工作进程数,事件块设定连接数,HTTP块涉及MIME类型、日志和包含其他配置。Server块定义虚拟主机,Location块处理URI匹配。Nginx常用于反向代理和负载均衡,如`proxy_pass`指令转发请求至后端服务器组。理解这些配置有助于服务器优化和测试。
17 0
|
2月前
|
资源调度 前端开发 JavaScript
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
|
3天前
|
存储 数据安全/隐私保护 虚拟化
CloudStack Agent 配置文件解析与含义
CloudStack Agent 配置文件解析与含义
7 0
|
27天前
|
XML 存储 JavaScript
50. 【Android教程】xml 数据解析
50. 【Android教程】xml 数据解析
19 1
|
27天前
|
XML Java Android开发
04. 【Android教程】Android 工程解析及使用
04. 【Android教程】Android 工程解析及使用
18 0
04. 【Android教程】Android 工程解析及使用
|
9天前
|
JavaScript Java 数据库连接
【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理
【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理
16 0
|
2月前
|
安全 数据安全/隐私保护
企业邮箱解析:定义、特点全揭秘,通信安全护航
商务邮箱是专为企业的邮件服务系统,强调专业形象、高效沟通和信息安全。它提供邮件管理、会议安排等功能,增强品牌形象和内部效率。重要的是选择稳定且安全的服务商。商务邮箱使用企业域名,展示专业性并提升品牌识别度,包含群发管理、邮件追踪等高级功能。市场有多种服务商,如Zoho Mail和G Suite,选择时需考虑稳定性、安全性等因素。商务邮箱对提升企业形象、加强内部管理、保障信息安全、支持移动办公及客户服务起关键作用。
27 1

推荐镜像

更多