WCF基本概念
WCF是基于Windows平台下开发和部署服务的SDK。服务是一组公开的功能集合。
面向服务(Service Orientatio,SO)是一组原则的抽象,
面向服务的应用程序(SOA)将众多服务聚集到一个单一逻辑的应用程序中。
1.服务的执行边界
WCF不允许客户端直接与服务交互,客户端总是使用代理(proxy)将调用转发给服务。
代理公开的操作与服务相同,同时还增加了一些管理代理的方法。代理可以拦截WCF的请求,并增加WCF的价值。
WCF允许客户端跨越执行边界和服务通信。在同一机器中,客户端可以调用同一个应用程序域中的服务,也可以在同一进程中跨应用程序域调用,甚至跨进程调用。
跨越机器边界通信是指客户端可以与服务跨越Internet(互联网)或者Intranet(局域网)交互。
2.地址
每一个服务都有唯一的地址,地址包含两个重要的元素:服务位置和传输协议,
服务位置包含:目标机器名,站点(或者网站),通信端口,管道(或者是队列),以及一个可选的特定路径或URI。
传输协议:Http(s),TCP,IPC,Peer network,MSMQ,Service bus
地址格式:[基地址]/[可选的URI]
基地址格式:[传输协议]://[机器名或域名][:可选端口]
=>[传输协议]://[机器名或域名][:可选端口] /[可选的URI]
eg:http://localhost:8001/MyService
读作:采用Http协议访问localhost机器,MyService服务在8001端口处等待用户的调用。
3.托管
1) IIS 5/6托管
此版本的IIS托管只能使用Http协议,如果是IIS5,还受端口限制,要求所有服务必须使用相同的端口号。服务的基地址必须与.svc文件的地址相同。此托管无法满足Intranet内部的访问。
2) 自托管
由开发组提供和管理宿主进程的生命周期的一种方式。客户端调用自托管的服务时,该服务进程必须先启动。
3) WAS托管
WAS:Window激活服务,新一代Windows系统中通用的托管引擎。
WAS确实是通用的宿主引擎,可以托管网站(实际上IIS7默认使用WAS托管网站),可以方便地托管服务,允许使用任何传输协议,如TCP,IPC,MSMQ等,可以单独安装或者配置WAS,不需要和IIS7一起使用。托管WCF服务需要提供svc文件
4) IIS/WAS里的自定义托管
如果需要直接与宿主交互,WCF提供了一个叫做“宿主工厂”的hook,在svc文件里直接使用Factory标签,可以提供自定义创建宿主的类。
5) Windows Server AppFabric
WAS并不知道托管的是WCF服务还是网站,对WCF服务也不会做什么优化工作。为了处理这个问题,可以安装WAS扩展程序,即Windows Server AppFabric(需要安装IIS7.5及以上),此扩展程序的设计目的就是为WCF和WF提供监控、显示,以及事件跟踪等额外的配置选项。
Windows Server AppFabric在第一个客户端请求到来之前就已经启动服务。
WAS会在第一个客户端请求到来后再启动服务宿主进程。
4.绑定
一个绑定封装了注入传输协议、消息编码、通信模式、可靠性、安全性、事物传播,以及互操作性等相关选项。理想状态下,希望将所有繁杂的基础功能模块从服务代码中解放出来,让服务只需要关注业务逻辑的实现。绑定使得开发者能够基于不同的基础功能模块使用相同的服务模块。单个服务能够支持各个地址上的多个绑定。
WCF定义了五种常用的绑定
1) 基本绑定:BasicHttpBinding。
2) TCP绑定:NetTcpBinding,要求客户端与服务都必须使用WCF。
3) IPC绑定:NetNamePipeBinding,在同一机器通信进行传输,性能最佳,最安全。
4) Web服务(WS)绑定:WSHttpBinding
5) MSMQ绑定:NetMsmqBinding
5.终结点
服务与地址、绑定及契约有关。其中,地址定义了服务的位置,绑定定义了服务通信的方式,契约定义了服务的内容。每一个终结点都包含了这三个元素,而宿主负责公开终结点,从逻辑上讲,终结点相当于服务的接口。
每个服务至少必须公开一个业务终结点,每个终结点有且只能拥有一个服务契约。
默认绑定配置:默认绑定会影响使用此配置文件的应用程序里的所有服务,不需要使用名称,每个绑定类型最多有一个默认绑定。
<netTcpBinding>
<binding transactionFlow=”true” />
</netTcpBinding>
默认终结点
如果服务宿主没有定义终结点,只提供了一个基地址,则WCF将会为服务添加默认的终结点。WCF会为每个基地址、每个契约添加终结点,使用基地址作为服务地址。WCF会根据基地址的scheme来推断绑定类型。WCF也会通过连接绑定和契约名字来命名终结点。
协议映射
<system.serviceModel>
<protocolMapping>
<add scheme=”http” binding=”wsHttpBinding” />
</protocolMapping>
</system.serviceModel>
6.元数据交换
1) 基于HTTP-GET的元数据
基于HTTP-GET交换元数据就是一种服务行为,服务添加此行为就能够自动提供基于HTTP-GET的元数据。
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" httpGetUrl="MyMexAddress"/>
</behavior>
2) 元数据交换终结点
公开元数据交换终结点,用户只需要指定使用的地址和绑定,并添加服务元数据行为即可,serviceMetaData标签,通常情况下不用为它添加值。
标准终结点:WCF为元数据交换、服务发现、服务通告、工作流和Web分别提供了标准终结点。
<service name="StandardEndPoint.Service1">
<endpoint address="MyService" binding="basicHttpBinding" contract="StandardEndPoint.IService1"></endpoint>
<endpoint kind="mexEndpoint" address="httpmex"></endpoint>
</service>
7.传输会话层
传输会话:它确保了来自一个特定客户端的消息被发送到宿主的相同传输通道上。传输层会话是可选的,它只是绑定配置中的一个设置,它会影响到可靠性、实例管理、错误管理、同步、事物和安全。
TCP和IPC绑定都支持传输会话,basicHttpBinding不具备传输会话,WSHttpBinding绑定通过为每条消息插入唯一的ID识别客户端,客户端每次调用发送该ID来维持传输会话。
传输会话通常会在客户端关闭代理时终止。当客户端强制关闭或者通信错误而断开时,每个传输会话具有一个空闲时间的超时值,默认为10min。
<netTcpBinding>
<binding name="tcpsession">
<reliableSession inactivityTimeout="00:25:00"/>
</binding>
</netTcpBinding>
8.可靠性
WCF与其他面向服务技术之间的最大区别在于传输可靠性和消息可靠性。
传输可靠性:在网络数据包层提供了点对点保证传递,以确保数据包的顺序无误。
消息可靠性:负责处理消息层的可靠性,它提供了端对端担保传递,确保消息的顺序无误。为了实现基于消息的可靠通信,该标准维持了一个传输会话层。
OSI七层结构:
7 应用层
6 表示层
5 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层
NetTcpBinding,WSHttpBinding支持可靠性,默认禁用;支持有序传递,默认启用。
WSDualHttpBinding支持可靠性,默认启用;支持有序传递,默认启用。
NetNamedPipeBinding可靠性固有。
WCF允许开发者只启用可靠性,而不启用有序传递。有序传递依赖于可靠性,如果启用了有序传递却禁用了可靠性,调用就不会按顺序传递。
配置可靠性
<bindings>
<netTcpBinding>
<binding name="reliabletcp">
<reliableSession enabled="true"/>
</binding>
</netTcpBinding>
</bindings>
WCF基本概念的更多相关文章
- 菜鸟学习WCF笔记-概念
背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神 ...
- WCF回顾一、基本概念和应用场景
一.WCF描述 wcf是一款基于面向服务的架构的通讯框架平台,在分布式框架中得到了广泛使用. wcf入门非常简单,只要花几分钟就能编写一个完整的wcf程序,而实际上WCF是概念非常多的一门技术,需要花 ...
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...
- WCF入门教程1——WCF简要介绍
什么是WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windo ...
- WCF自定义扩展,以实现aop!
引用地址:https://msdn.microsoft.com/zh-cn/magazine/cc163302.aspx 使用自定义行为扩展 WCF Aaron Skonnard 代码下载位置: S ...
- 跟我一起学WCF(4)——第一个WCF程序
一.引言 前面几篇文章分享了.NET 平台下其他几种分布式技术,然而前面几种分布式技术专注于某一特定的领域,并且具有不同编程接口,这使得开发人员需要掌握多个API的使用.基于这样的原因,微软在.NET ...
- WCF探索之旅(一)——入门
背景 对于.NET程序员来说,假设你不知道WCF,那仅仅能说明一点:你还是个菜鸟. 曾经也用.NET做过几个系统,尤其做后面的系统的时候,心里就有点沾沾自喜了! 想着,.NET也就这点东西,我如今也能 ...
- WCF 学习总结1 -- 简单实例
从VS2005推出WCF以来,WCF逐步取代了Remoting, WebService成为.NET上分布式程序的主要技术.WCF统一的模型整合了以往的 WebService.Remoting.MSMQ ...
- MSDN Webcast 跟我一起从零开始学WCF系列课程
系列课程 >跟我一起从零开始学WCF系列课程 跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200) 讲 师:徐长龙 课程简介:从 本堂课开始我们将开启一个新的 ...
随机推荐
- css3动画响应式404页面
PC端效果: 模拟触屏端效果: 兼容性:触屏端及桌面端(优雅降级至IE6) 模板下载: http://pan.baidu.com/s/1o67ftc2
- Lucene全文检索框架
1.什么时Lucene? 是一个全文搜索框架,而不是应用产品,他只是一种工具让你能实现某些产品,并不像www.baidu.com拿来就能用 是apache组织的一个用java实现的全文搜索引擎的开源项 ...
- linux中PHP dirname(__FILE__)路径问题解决
近期在给wordpress开发模板功能时发现,直接使用include(“文件名”)的形式调用其他php代码片段时会出现路径错误.之前服务器环境一直都是iis,未曾出现过类似的BUG,但换成linux服 ...
- MIS2000 Lab,我的IT人生与职场--从零开始的前十五年 与 我的微创业
http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/16/ithome_2014_ironman.aspx [IT邦幫忙]鐵人賽 -- MIS2 ...
- Vmware下Ubuntu无法上网的问题
本来这个挺简单的个问题,但是由于很久没有使用虚拟机并且期间实体机网络环境发生了一些变化,导致了一些麻烦. 一般用NAT就行了,就是Vmware右下角那个图标(左起第4个)设置就行. 我这么设置了还是不 ...
- python3.3中使用tornado.options.parse_config_file的时候,在windows下conf为utf-8时,报错的问题
由于我的windows7下的默认编码是gbk 在调用tornado.options.parse_config_file时,内部代码为 with open(path) as f: exec_in(f.r ...
- WPF 中的字号问题
用WPF搞打印机真是各种碰壁,尤其是对于我这个没有搞过打印机的人来说,更是遍布神坑T_T. 今天敲代码的时候发现字体的FontSize貌似跟单位也有关系啊,因为打印的时候效果感觉和预期竟然是有着差距的 ...
- Kettle计算器的使用以及字符串格式化
1.简介 先生成随机数,将生成的2列随机数进行计算,并且格式化计算结果 2.kettle流程图 3.流程图详细描述 3.1生成随机数 生成2个随机数字,列名为N1,N2 3.2计算器 将N1与N2对应 ...
- 【转】Oracle中如何用一条SQL快速生成10万条测试数据
转自http://blog.csdn.net/welken/article/details/4971887 做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入, ...
- GitFlow教程
GitFlow教程 这份教程是博主学到的git基础,仅适合小团队使用,仅供参考 配置Git 配置github上面的账号,首先需要自己在git上注册一个账号 git config --global us ...