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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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后决定学习它的原理,这样我们才能运用的更加灵活,也就是说当我们知道了“是什么”以后,还要知道“为什么”,这样的学习过程会让我们大大的提高学习效率,如果有什么理解不对的地方,还请各位读者留言指出!!

目录
打赏
0
0
0
0
39
分享
相关文章
策略模式(Strategy Pattern)深度解析教程
策略模式属于行为型设计模式,通过定义算法族并将其封装为独立的策略类,使得算法可以动态切换且与使用它的客户端解耦。该模式通过组合替代继承,符合开闭原则(对扩展开放,对修改关闭)。
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
11 1
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。
阿里云发票申请图文教程及常见问题解析
在购买完阿里云服务器或者其他云产品之后,如何申请发票成为了许多用户关注的焦点。尤其是对于初次购买阿里云服务器的用户来说,发票申请流程可能并不熟悉。本文将为大家详细介绍阿里云服务器购买之后如何申请发票,以及申请过程中可能遇到的常见问题,帮助大家轻松完成发票申请。
阿里云轻量应用服务器产品解析与搭建个人博客网站教程参考
轻量应用服务器(Simple Application Server)作为阿里云面向单机应用场景推出的云服务器产品,以其一键部署、一站式管理、高性价比等特性,深受个人开发者、中小企业及入门级用户的喜爱。本文将全面解析阿里云轻量应用服务器的产品优势、应用场景、使用须知,以及使用轻量应用服务器搭建个人博客网站的详细教程,帮助用户更好地了解和使用这一产品。
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
314 12
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
反向DNS解析是从IP地址到域名的映射,主要作用于验证和识别,提高通信来源的可信度和可追溯性
在网络世界中,反向DNS解析是从IP地址到域名的映射,主要作用于验证和识别,提高通信来源的可信度和可追溯性。它在邮件服务器验证、网络安全等领域至关重要,帮助识别恶意行为,增强网络安全性。尽管存在配置错误等挑战,但正确管理下,反向DNS解析能显著提升网络环境的安全性和可靠性。
293 3
|
4月前
|
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
83 12
二维码操作[二维码解析基础版]免费API接口教程
此接口用于解析标准二维码内容,支持通过BASE64编码或远程图片路径提交图片。请求需包含用户ID、用户KEY、图片方式及图片地址等参数,支持POST和GET方式。返回结果包括状态码和消息内容,适用于图片元素简单的二维码解析。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等