勇哥注:
这篇贴子试图从四个方面来介绍wcf的全部知识点。这个目的是有点夸大,因为只是盘点没有细化。
但是做为Wcf的完整功能介绍的总目录应该是可以的。
wcf的知识回顾从下面的四个角度进行讲解:
(1)首先是Wcf在SOA中的定位来谈(按发展时间的历史)如下图所示:
(图1 wcf在soa技术中的定位)
(2)然后是从wcf的架构方面来谈,如下图所示:
(图2 wcf的架构)
(图3 常见的绑定类型)
(3)最后是是客户端访问wcf服务的方式来谈,如下图所示:
(图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可以进行相应配置。
企业网
一种复杂的网络应用。
企业网不仅限于办公室内部,还可能覆盖到企业的各个分支机构、远程办公点,甚至包括与合作伙伴、供应商等外部机构的网络连接。
企业网能够有效地整合企业的各种资源,包括硬件资源(如服务器、工作站、路由器等)和软件资源(如数据库、应用程序等),实现资源的共享和高效利用。
另外,企业网的安全度要求极高。
互联网
互联网的一个重要需求是要能穿透防火墙,企业网的异地办公实际上也是用到了互联网。
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服务的方式
1。服务端对外公开提供endPoint,endPoint包括ABC三要素,即地址、绑定、契约
2。客户端通过代理proxy,通过ABC,来访问服务端。
3。注意双向箭头,表示双方是有去有回/或者是双向的通信。
3.2 访问原理
WCF的体系架构是基于一种拦截机制来实现的,负责传递和拦截消息的组件为通道,在客户端发出对服务端服务的调用时,首先会通过一个服务代理对象,将调用方提供的对象序列化到消息中,然后该消息则通过通道进行传递。通道不只是包括一个,而是多个通道对消息进行处理,包括传输、消息编码、管理会话、传播事务等,但最底层的通道总是传输通道。这些通道的构成形成了一个通道堆栈。由于对象已经被序列化,因而此时通道传递的消息可以跨进程或机器进行传递,利用传输通道传递到服务端。服务端的构成与客户端基本相似,仍然是通过通道栈中最底层的传输通道接收消息,然后解析消息编码,并一层层地往上传输。在服务端的通道栈之上,则是一个分发器(Dispatcher,或者说是调度器),它会首先对消息进行检查,然后选择一个客户端要调用的操作。在这个过程中,消息会被反序列化。
下图说明了WCF的整个运行过程:
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

