wcf知识点全回顾

勇哥注:

这篇贴子试图从四个方面来介绍wcf的全部知识点。这个目的是有点夸大,因为只是盘点没有细化。

但是做为Wcf的完整功能介绍的总目录应该是可以的。



wcf的知识回顾从下面的四个角度进行讲解:


(1)首先是Wcf在SOA中的定位来谈(按发展时间的历史)如下图所示:


image.png

(图1 wcf在soa技术中的定位)


(2)然后是从wcf的架构方面来谈,如下图所示:

image.png

(图2 wcf的架构)

image.png

(图3 常见的绑定类型)


(3)最后是是客户端访问wcf服务的方式来谈,如下图所示:

image.png

(图4 wcf客户端连接服务端的示例)


(4)wcf技术的其它关注点

   有关实际应用时候的一些分类话题。
   也就是实战时的一些话题,这个反而非常重要!


(一)wcf在soa中的定位


soa为何出现?(从技术进步的历史进程来看):

而技术进步的历史实际上是需求变换的历史。

面向对象:解决代码维护性问题【设计模式】

面向组件:解决复用性问题[com+-->DCOM], [react,  html->一个个页面分成各个组件[es6 jsx, scss],让js成了一个面向对象的语言] 

面向服务:解决多系统互通问题【跨平台,跨语言】,否则写的系统 ,不能被别的系统调用。


soa的需求和目的:

  解决IT企业的信息孤岛的问题(数据孤岛,系统孤岛,业务孤岛)

  一些历史遗留系统的互通问题


SOA架构的源起  http://www.skcircle.com/?id=2461


扩展了解:


(1)web api和wcf的比较

webapi和wcf的比较

http://www.skcircle.com/?id=2308


WCF与Web API在应用上的选择

https://www.cnblogs.com/weiweithe/p/4213908.html


WCF、WebAPI、WCFREST和Web服务的差异 ASP.NETMVC和ASP.NETWebAPI的差异

https://www.cnblogs.com/licin/p/7363564.html


(2)ESB(企业数据总线)相关阅读


BizTalk 开发系列

https://www.cnblogs.com/cbcye/archive/2008/10/28/1321182.html

微软上线文档

https://learn.microsoft.com/zh-cn/biztalk/core/understanding-biztalk-server


(3)soa之后还有什么新的方法论?

soa再往后走?(微服务-->DDD),不过并不是soa的升级,而是新需求和对应的新架构。

微软.net的微服务的背景知识的需求清单  http://www.skcircle.com/?id=2331



1.1 什么是soa?

      SOAService Oriented Architecture  面向服务架构

      SOA架构与wcf   http://www.skcircle.com/?id=2391


1.2  wcf的在woa中的定位

       如图1所示

       soa技术有三个分支,wcf是属于web service标准下的分支,wse技术是它的一个子集。

      

      wcf到底算是个什么框架? http://www.skcircle.com/?id=2457


1.3  什么是web service标准?

      webservice标准中有三个概念:WSDL,XSD, SOAP

      下面是勇哥的解释:

你wcf的元数据,就是用wsdl来描述的,你通过浏览器访问元数据,显示的就是wsdl的内容。
而wcf本身实现Application的通信问题,各个子系统之间是通过XML Message进行交互的,
这个XML Message就是使用soap(一种标准化定义的消息格式)发布的。

WSDL:公布元数据
SOAP:简单对象访问协议[基于xml]
XSD:将各自系统的强类型转成XSD规范进行互通  [xml序列化用的]
     例子:
     .net    System.String
     xsd     x:string
     java    Java.lang.String
xsd是描述数据类型的,.net, java的程序最终生成的数据契约都是xsd的
不同的语言都是根据XSD生成各自平台下的强类型。

     


1.4  什么是RestRull标准?

     RestRull标准:推荐使用一套简洁的API来支持CRUD(创建、读取、更新、删除)操作

     wcf中的REST服务,就可以用来实现RestFull风格的web api。(是微软强行为了让wcf跟上restfull的流行风打的补丁功能)


1.5  其它标准有哪些?

    最著名的是java的Spring Clound。

    Spring Clound简介  http://www.skcircle.com/?id=2459


1.6  wcf支持的通讯协议


http/https    

    https跟http的区别   http://www.skcircle.com/?id=2455

tcp,udp

    udp在wcf中算是最后被支持的一个新功能

MSMQ

     WCF的知识点盘点(三)http://www.skcircle.com/?id=2411

    使用MSMQ进行可靠的消息通讯       http://www.skcircle.com/?id=2416

Peer

      wcf中的Peer(对等网络,Peer-to-Peer,简称P2P) http://www.skcircle.com/?id=2458

WebSocket

     wcf中的新增功能。


1.7 wcf支持的分布式技术

指的是wcf支持或者替代下面的一些分布式技术。

COM+

     COM+技术介绍   http://www.skcircle.com/?id=2460


.Net Remoting

    .net4.x可用的 .net Remoting,一种微软的RPC的技术   http://www.skcircle.com/?id=2265


WebService

   WebService:主要基于SOAP(Simple Object Access Protocol)协议进行通信,依赖于HTTP协议。

   Wcf不仅支持SOAP XML,还支持Json;在安全性上WebService较弱,WCF更强。

   另外,wcf有配置灵活、与.net框架集成度高,更可靠等优点。

   webService的hello world    http://www.skcircle.com/?id=2326


WSE

微软的WSE(Web Services Enhancements)是一个用于构建和部署安全的Web服务的扩展框架。于2006年发布3.0版本并停止维护更新。之后官宣以WCF完全代替。


MSMQ

   严格来讲msmq只是单机版的消息队列,因此跨电脑的分布式应用应该使用分布式的消息队列,而不是用这个。

   WCF的知识点盘点(三)http://www.skcircle.com/?id=2411

   使用MSMQ进行可靠的消息通讯       http://www.skcircle.com/?id=2416



1.8 wcf支持网络通信技术

跨进程

  跨进程访问分为本地访问和跨网络访问,使用不同的binding类型。

跨机器

  指的是在不同电脑之间。

跨子网、跨域

  企业内网跨子网可以用硬件三层交换机,如果是跨域通讯,则wcf可以进行相应配置。

企业网

一种复杂的网络应用。    

企业网不仅限于办公室内部,还可能覆盖到企业的各个分支机构、远程办公点,甚至包括与合作伙伴、供应商等外部机构的网络连接。

企业网能够有效地整合企业的各种资源,包括硬件资源(如服务器、工作站、路由器等)和软件资源(如数据库、应用程序等),实现资源的共享和高效利用。

另外,企业网的安全度要求极高。

image.png

互联网

互联网的一个重要需求是要能穿透防火墙,企业网的异地办公实际上也是用到了互联网。


1.9  wcf支持的宿主类型

IIS

Window Services

winForm

WPF


1.10  Wcf支持的消息模式

SOAP(XML)

RestFull(JSON)


1.11 wcf的安全机制

XS09

    此方式暂无资料

用户名密码 

    此方式放在后面章节介绍《客户端访问wcf服务的方式

证书

    此方式是要花钱买域名证书。



1.12  wcf的restfull模式

  wcf的REST服务类似mvc web api,为了应对移动互联网的兴起而打的补丁。


 WCF的知识点盘点(三)http://www.skcircle.com/?id=2411

 wcf的REST服务(1) 一个简单例子  http://www.skcircle.com/?id=2392

 REST服务跟RESTful说的是同一个东西吗?  http://www.skcircle.com/?id=2368

      


(二)wcf的架构

wcf的架构分为下面四个部分

协定:数据协定,消息协定,服务协定,策略与绑定

服务运行时:限制行为,错误行为,元数据行为,实例行为,消息检查,事务行为,调度行为,并发行为,参数筛选

消息传递:WS安全通道,WS可依赖消息传递通道,编码器:二进制/MTOM/文本/XML,HTTP通道,

                 TCP通道,事务流通道,NamedPipe通道,MSMQ通道

激活与承载:IIS,exe,windows服务,com+


(2.1) 契约

  2.1.1   数据契约、消息契约、服务契约、策略与绑定

数据契约:服务中的参数;即对xsd的操作

          WCF的知识点盘点(二)数据绑定,svcutil的支持,消息契约的应用  http://www.skcircle.com/?id=2410

消息契约:使用SOAP协议特定的消息部分;

         消息契约指的:CLR类型可以直接操控Message, [header(信封), body]

         WCF的知识点盘点(二)数据绑定,svcutil的支持,消息契约的应用  http://www.skcircle.com/?id=2410

服务契约:服务中的方法,对契约的特性 ServiceContract;

         WCF的知识点盘点(四)运行时Behavior介绍,服务行为 [ServiceBehavior],服务安全阈值  http://www.skcircle.com/?id=2412

策略与绑定:策略设置安全或其他条件,绑定指定传输方式与编码。


(2.2) 服务运行时

服务运行期间的行为控制。

配置文件中 behaviors节,就是对影响wcf运行时的一些方法进行配置(服务线程数,服务实例,事务等)


  2.2.1  限制行为

  控制处理的消息数;


  2.2.2  错误行为

出现内部错误时所处理的操作;


  2.2.3  元数据行为

   是否向外提供元数据及元数据的提供方式;


    wcf元数据配置的几种方式    http://www.skcircle.com/?id=2421

  

  2.2.4  实例行为

  app.config中的behaiviors配置的就是实例行为,包含可运行的服务实例数目等信息;


  2.2.5 消息检查

  可以用来做安全检查

  WCF的知识点盘点(六)端点行为EndPointBehavior, 操作行为OperationBehavior   http://www.skcircle.com/?id=2414

  WCF的知识点盘点(七)安全机制  http://www.skcircle.com/?id=2415


  2.2.6  事务行为

  处理事务;

WCF的知识点盘点(五)分布式事务  http://www.skcircle.com/?id=2413


  2.2.7 调度行为

  控制WCF处理消息的方式;


  2.2.7  并发行为

  


  2.2.8  参数筛选

  



(2.3)消息传递

消息传递层:说明数据的交换格式和传输模式。

消息传递层由通道(信道)组成,通道是对消息进行处理的组件,负责以一致的方式对消息进行整理和传送。

通道用于传输层、协议层、及消息获取。 各层次的通道组成了信道栈。


通道对消息和消息头进行操作,服务运行时对消息正文进行操作。

两种类型:传输通道 与 协议通道。

传输通道:读取和写入来自网络的消息,传输通道通过编码器将消息转换为网络传输使用的字节流,

以及将字节流转换为消息。传输通道示例如:HTTP通道、命名管道、TCP、MSMQ等;

协议通道:通过读取或写入消息头的方式来实现消息协议,协议通道示例如:WS-Security,WS-Reliability。


  2.3.1  WS安全通道

  WCF的REST服务抓到的包为啥是密文的? http://www.skcircle.com/?id=2453


  2.3.2  WS可依赖消息传递通道

  NetTcpBinding的 ”可靠的消息传输“机制   http://www.skcircle.com/?id=2383


  2.3.3  编码器:二进制/MTOM/文本/XML

          

  2.3.4  HTTP通道,TCP通道

         wsHttpBinding, basicHttpBinding

         wsTcpBinding

  2.3.5  NamedPipe通道

       仅用于同一台电脑上的不同进程间

  2.3.6  MSMQ通道

     WCF的知识点盘点(三) http://www.skcircle.com/?id=2411

     使用MSMQ进行可靠的消息通讯       http://www.skcircle.com/?id=2416

     


(2.4)激活与承载

  指的是host的宿主类型。

  exe包括winform, 控制台程序,wpf程序

  

 wcf的几种宿主的比较  http://www.skcircle.com/?id=2422



(三)客户端调用wcf服务



3.1  客户端访问wcf服务的方式

image.png

1。服务端对外公开提供endPoint,endPoint包括ABC三要素,即地址、绑定、契约

2。客户端通过代理proxy,通过ABC,来访问服务端。

3。注意双向箭头,表示双方是有去有回/或者是双向的通信。


3.2  访问原理

WCF的体系架构是基于一种拦截机制来实现的,负责传递和拦截消息的组件为通道,在客户端发出对服务端服务的调用时,首先会通过一个服务代理对象,将调用方提供的对象序列化到消息中,然后该消息则通过通道进行传递。通道不只是包括一个,而是多个通道对消息进行处理,包括传输、消息编码、管理会话、传播事务等,但最底层的通道总是传输通道。这些通道的构成形成了一个通道堆栈。由于对象已经被序列化,因而此时通道传递的消息可以跨进程或机器进行传递,利用传输通道传递到服务端。服务端的构成与客户端基本相似,仍然是通过通道栈中最底层的传输通道接收消息,然后解析消息编码,并一层层地往上传输。在服务端的通道栈之上,则是一个分发器(Dispatcher,或者说是调度器),它会首先对消息进行检查,然后选择一个客户端要调用的操作。在这个过程中,消息会被反序列化。
下图说明了WCF的整个运行过程:

image.png

image.png


WCF的知识点盘点:四.wcf程序的运行原理示意图   http://www.skcircle.com/?id=2409


3.3 wcf的配置文件


wcf服务配置器  http://www.skcircle.com/?id=2417

wcf中Service的name  http://www.skcircle.com/?id=2430


3.4 终结点endpoint


WCF的知识点盘点(六)端点行为EndPointBehavior, 操作行为OperationBehavior
   http://www.skcircle.com/?id=2414



3.5 预定义绑定的选择

 WCF的知识点盘点(三)http://www.skcircle.com/?id=2411


3.6  客户端调用的方式

WCF 客户端调用几种方式   http://www.skcircle.com/?id=2402

再谈服务引用:二. 对集合和枚举类型,要解决的坑  http://www.skcircle.com/?id=2410


3.7  实例与会话

WCF实例上下文以及会话     http://www.skcircle.com/?id=2401

WCF的知识点盘点(四)运行时Behavior介绍,服务行为 [ServiceBehavior],服务安全阈值
  http://www.skcircle.com/?id=2412


3.8  安全机制


WCF的知识点盘点(七)安全机制  http://www.skcircle.com/?id=2415



(四)WCF技术的其它关注点


  4.1 wcf的序列化

  WCF盘点+实验分布式halcon应用(一)基本应用 http://www.skcircle.com/?id=2367


  4.2 WCF的三种消息交互模式

WCF可以采用三种不同的Message Exchange Pattern(消息交互模式,MEP)
——One-way,Request/Response,Duplex。

其实从本质上讲,One-way,Request/Response是两种基本的MEP,
Duplex可以看成是这两种MEP的组合——两个One-way,
两个Request/Response或者是一个One-way和一个Request/Response。

wcf的双工通讯  http://www.skcircle.com/?id=2431

wcf的双工通讯的变种:发布订阅   http://www.skcircle.com/?id=2432   


  4.3  异常处理

  wcf(3) 基于会话的客户端及异常处理  http://www.skcircle.com/?id=2386


  4.4  条件获取与条件更新

wcf的条件更新(Conditional Update)  http://www.skcircle.com/?id=2435

wcf的条件获取(Conditional Retrieval) http://www.skcircle.com/?id=2433


  4.5  wcf的缓存机制

  wcf(3) 基于会话的客户端及异常处理  http://www.skcircle.com/?id=2386


发散阅读:

.NET的缓存(一)缓存、多级缓存的概念及用途的介绍  http://www.skcircle.com/?id=2436

.NET的缓存(二).net的 MemoryCache http://www.skcircle.com/?id=2437


  4.6  超时处理

  WCF各种超时问题的处理  http://www.skcircle.com/?id=2429


  4.7  rest服务的抓包

    让Fiddle可以抓到 .NET 应用程序的包,包括wcf应用程序的包  

    http://www.skcircle.com/?id=2426


  4.8  wcf技术的未来

  微软在2015年把wcf开源后,放弃了官方更新。

  wcf怎么在.net core中的应用   http://www.skcircle.com/?id=2456

  分布式应用是很复杂的,wcf对于分布式应用的支持是有限的,需要许多软件的配合。

  发散阅读:
  分布式系统概念扫盲   http://www.skcircle.com/?id=2427



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-07-15 09:40:31 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864