在《通过一个模拟程序让你明白ASP.NET MVC是如何运行的》一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序...消息的编码和解码通过消息编码器(MessageEncoder)完成,而消息编码器工厂(MessageEncoderFactory)负责创建该对象; 请求消息的反序列化和回复消息的序列化:对请求消息进行反序列化...消息的编码和解码通过消息编码器完成,而消息编码器工厂负责创建该对象; 请求消息的发送和回复消息的接收:在传输层将经过编码的请求消息发送到服务端,以及接收来自服务端的回复消息。...针对WCF服务的请求处理实现在如下的ProcessRequest方法中,执行的逻辑也不算复杂。我们直接通过消息编码器工厂创建的消息编码从当前HTTP请求的输入流中读取出消息。...接下来通过消息编码器工厂创建的消息编码器对消息进行编码,并将得到的字节数据通过创建的HttpWebRequest对象发送出去。
消息协定概述 通常,定义消息的架构时使用数据协定就足够了 有时必须精确控制如何将类型映射到通过网络传输的SOAP消息。 ...如果在没有正确配置的情况下使用这些安全功能(例如,在不提供凭据的情况下试图对消息进行签名),则会在验证时引发异常 对于消息头,会分别为每个消息头确定其保护级别 对于消息正文,保护级别可理解为...无论包含几个正文部分,正文都只有一个保护级别。正文的保护级别由所有正文部分的最高ProtectionLevel属性设置确定。...不过,您应该将每个正文部分的保护级别设置为实际要求的最低保护级别 控制标头和正文部分的名称和命名空间 在消息协定的SOAP表示形式中,每个标头和正文部分都映射为一个具有名称和命名空间的XML元素...为了提高性能,特别是对于消息在网络上的大小,请将多个标头和正文部分合并成一个标头或正文部分
在客户端指定地址 2.4.3. 地址报头 2.3. 端口共享 2.3.1. 端口共享在WCF中的意义何在? 2.3.2. 基于HTTP|HTTPS的端口共享 2.3.3....序列化在WCF框架中的实现 5.7.1. 消息格式化器 5.7.2. DataContractSerializer还是XmlSerializer? 5.7.3....消息 6.2.1. 消息版本 6.2.2. 如何创建消息 6.2.3. 消息的基本操作 6.3. 消息报头与消息属性 6.3.1. MessageHeaderInfo 6.3.2....消息编码 6.6.1. 消息编码器 6.6.2. 消息编码器工厂 6.6.3. 消息编码绑定元素 6.6.4. 消息编码与绑定 6.6.5. 消息编码的实现 6.6.6....实例演示:通过自定义消息编码器实现消息压缩(S620) 第7章 服务寄宿 (Hosting) 7.1. 服务描述 7.1.1. ServiceDescription 7.1.2.
由于安全体系在整个WCF框架体系中具有极其重大的分量,我特意将其分成两个部分:传输安全(主要涉及对认证、消息一致性和消息机密性的实现)和授权与审核。...网络的不确定性为分布式应用带来了一系列安全隐患,在正式投入介绍WCF的传输安全之前,我们先来介绍一下这些安全隐患。...接下来,我们来简单地介绍一下WCF传输安全体系如何解决上述的这些网络安全隐患。...在本篇文章的一开始我们就提到了,WCF的传输安全旨在解决三个典型的安全问题,即认证、消息一致性和消息机密性,我们下来讨论一下什么是认证,如何实现认证。...不过,具体应用在选择密码存储策略的时候,可以根据自身所需的安全级别以及是否需要返回原始密码,选择对原始密码进行哈希或者加密。但是,无论如何对密码进行明文存储是不被允许的。
2.2 端口共享(Port Sharing) 2.2.1 端口共享在WCF中的意义何在? ...框架中的实现 5.6.1 MessageFormatter 5.6.2 MessageFormatter在WCF框架中的应用 第6章 消息、... 6.2.1 消息版本(Message Version) 6.2.2 如何创建消息 6.2.1 消息的基本操作和消息状态 ...-2:基于消息契约的方法调用是如何格式化成消息的? ...和XmlDictionaryWriter 6.5 消息编码在WCF框架中的实现 6.5.1 消息编码器(MessageEncoder)
但是在真正的WCF处理框架中,却并不直接使用XmlDictioanryWriter和XmlDictionaryReader对象,而通过相应的消息编码器(System.ServiceModel.Channels.MessageEncoder...一、消息编码器(MessageEncoder) 消息编码器通过类型MessageEncoder表示,MessageEncoder是定义在System.ServiceModel.Channels命名空间下的一个抽象类...体系下的编码机制实现 最后我们来介绍WCF体系下是如何对消息进行编码的。...在客户端,以方法调用形式体现的服务访问通过ClientMessageFormatter生成请求消息。该请求消息最终通过绑定对象从服务模型层转到信道层。...图1揭示了WCF进行消息编码的本质。 ?
WCF应用程序可以在转换或是服务层时记录日志,也可以在程序里面编写trace的相关的代码将log输出。而Tracing级别则是可以配置的,缺省配置是在Severity级别的信息才会被记录下來。...而TraceViewer可以打开WCF Trace File。...WCF和早期的分布式技术相比,它的Logging及Tracing功能是我们所喜欢的,甚至可以监控这样的功能,在分布式系统中的错误信息是非常难以定位的,WCF有了这个功能,我们可以从容的应对错误信息。...在codeproject上有一个可管理WCF Trace File大小的XmlWriterTraceListener。...另外codeplex有一个非常不错的WCF测试工具 WCF Test Harness 跟踪和消息日志记录
在某些情况下,我们要求WCF服务端框架严格按照消息在客户端应用中被发送的顺序交付给服务端应用,这需要消息传输机制提供有序消息交付(Ordered Message Delivery)的功能。...那么,建立在不可靠的IP协议上的TCP协议是如何实现报文段的可靠交付的呢?...对于TCP协议来说,每一个报文段具有一个序号,一般代表报文段承载的数据在整个发送的数据块所处的位置(以字节为单位),通过这个序列号就可以确定报文段发送的顺序。...实际上,WCF基于可靠会话机制的可靠消息传输的实现原理和TCP协议基本一致,如果硬是要找出不一致的地方,主要表现在以下四点: WCF可靠消息传输是基于SOAP消息级别的,TCP则是基于报文段级别;...连接范围内提供端到端的可靠传输,而WCF的可靠消息传输在两个SOAP终结点之间提供可靠传输,并不受传输连接(Transport Connection)的限制 由于可靠消息传输对于SOA的重要性,在WS-
WCF是对这些技术的统一。...是指为了解决在Internel环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。...传输通道:读取和写入来自网络的消息,传输通道通过编码器将消息转换为网络传输使用的字节流以及将字节流转换为消息。...WCF的基础概念 1.地址 2.绑定(Binding) 3.契约(Contract) 4.终结点 用来发送或接收消息(或执行这两种操作)的构造,终结点包含一个定义消息可以发送在的目的地位置节点...,包含一个定义消息可以发送到的目的地位置(地址),一个描述消息应如何发送的通信机制规范(绑定)以及对于可以在该位置发送或接收(或两者皆可)的一组消息的定义(服务协定)---该定义还描述了可以发送何种消息
WCF是对这些技术做了统一。 ? WCF为.Net Framework提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。 WCF的设计遵循的是面向服务的原则。...WCF具有如下的优势: 1、统一性 2、互操作性 3、安全与可信赖 4、兼容性 理解面向服务(SOA) SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构...传输通道:读取和写入来自网络的消息,传输通道通过编码器将消息转换为网络传输使用的字节流,以及将字节流转换为消息。...终结点包括一个定义消息可以发送到的目的地的位置(地址); 一个描述消息应如何发送的通信机制规范(绑定); 以及对于可以在该位置发送或接收(或两者皆可)的一组消息的定义(服务协定)—该定义还描述了可以发送何种消息...当客户端添加WCF服务引用的时候,会首先通过元数据取得服务器端的契约信息、终结点信息,然后根据这些信息在客户端创建了代理类,我们在客户端调用WCF服务的过程实际上就是通过代理类调用WCF服务的过程。
protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。...而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。...在基于UDP协议的网络应用中,由于UDP本身是有边界,那么用protobuf来处理业务消息就很方便。但在TCP应用中,由于TCP协议没有消息边界,这就需要有一种机制来确定业务消息边界。...在TCP网络编程中这是必须面对的问题。在tcp网络编程中,要反序列化业务消息,就要先知道业务数据的大小。而且在实际应用中可能在一个发送操作中,发送多个业务消息,而且每个业务消息的大小、类型都不一样。...显然消息边界的确认问题和protobuf库无关,还得自己搞定。在官方文档中也提到,protobuf并不太适合来作大数据的处理,当业务消息超过1M时,就应该考虑是否应该用另外的替代方案。
基于WCF堆栈的自宿主SelfHosting 上面我们介绍完了在ASP.NET上的Web宿主,接下来我们来介绍基于WCF堆栈的自宿主SelfHosting。...在HttpSelfHostServer 内部使用的WCF堆栈从传输媒体获取消息然后把他们推送到上层的消息处理管道。下面部分简要介绍WCF的高层架构,Web API自宿主的特征。...一个典型的使用案例的增加协议通道数字签名在发送方和验证签名的人在接收的一面。传输通道,使用编码器转换字节流和信息输送介质字节实例。...然后他利用这个Binding异步创建一个WCF传输堆栈,他也创建一个Pump把消息推入这个堆栈,并转换为HttpRequestMessage 实例并把新的请求推入HttpServer,下图是消息的处理流程...使用自宿主的时候,大多数的WCF HTTP binding 约束和设置都是可用的,在配置的内部创建的HttpBinding实例可以用2种方式创建。
WF 在 SOA 架构中,实现服务编排的功能。 参考架构: ?...(例如 Web 服务可靠消息传递(WS-ReliableMessaging)或对 EAI 中间件的支持) 安全性 服务级别 身份验证 授权 不可抵赖性...(例如 Web 服务可靠消息传递(WS-ReliableMessaging)或对 EAI 中间件的支持) 安全性 服务级别 身份验证 授权 不可抵赖性 机密性 安全标准...从应用的侧重点来看,SOA侧重于采用服务的架构进行系统的设计,关注如何处理服务;云计算侧重于服务的提供和使用,关注如何提供服务。...的面向服务SOA中间件设计》、《基于WCF的SOA框架设计》、《IBM-ESB 在 SOA 内的工作角色》、《WSSF(服务工厂)架构剖析》、《开源SOA快速入门指南》、《Composite Software
WCF的服务端和客户端均需要一个FaultFormatter对象,分别用于对FaultException异常对象的序列化和反序列化,现在我们分别介绍FaultFormatter对象在服务端和客户端是如何被创建的...1、FaultFormatter(DispatchFaultFormatter)在服务端如何被创建 FaultFormatter在服务端创建于服务寄宿之时。...,所以FaultFormatter在进行序列化或者反序列化过程之前,需要确定错误明细的类型;此外,不知道读者有没有注意到这一点:MessageFault并没有一个Action属性.对于一个SOAP消息来说...在WCF服务端框架内,在实现FaultException异常对象相Fault消息转换的过程中,除了提供与FaultException对等的MessageFault之外,还需要提供FaultException...当调用服务获得回复消息后,如何回复消息是Fault消息,WCF会调用MessageFault的CreateFault将消息转化成MessageFault对象,并获取Action值。
如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一。...你可以选择通过配置来为你的应用程序开启这些 WCF性能计数器级别之服务性能计数器 服务性能计数器将服务行为作为整体来进行衡量,可用于诊断服务整体性能。...请注意,即使在(通过现有服务)收到非激活消息时,或在从一个会话连接到实例、结束会话然后从其他会话重新进行连接时,也将创建新的 InstanceContext。...WCF性能计数器级别之终结点性能计数器 使用终结点性能计数器可以查看反映终结点如何接受消息的数据。...WCF性能计数器级别之操作性能计数器 如果使用性能监视器查看,可以在 ServiceModelOperation 3.0.0.0 性能对象下找到操作性能计数器。每个操作都有一个单独的实例。
WCF的可靠会话是建立在客户端和服务端之间,确保消息可靠传输的上下文,相当于WS-RM中序列的概念。...消息被接收端成功接收之后,会向发送端发送一个确认消息表示具有某个序号的消息已经成功接收。如果需要保障有序交付,接收端在交付之前需要确定先于该消息发送的所有消息是否成功交付。...但是,WCF并不能依赖于可靠会话被显式地被终止,而设定一个超时时限,在该时间范围内如何没有活动的消息交换,WCF会将可靠会话关闭。...WCF使用指数补偿算法根据计算的平均往返时间来确定何时重新传输。初始重试时间是根据测量的创建会话往返时间来计算的。重新传输算法是每进行一次尝试,延迟时间就会增加一倍。...其他选项,比如支持的WS-RM版本,以及消息缓冲区大小,都是系统为我们定制的,不能修改。
所以,消息在整个WCF体系结构中处于一个核心的地位,WCF可以看成是一个消息处理的管道。 尽管消息在整个WCF体系中具有如此重要的意义,可是一般的WCF编程人员,却意识不到消息的存在。...[第18篇] 消息契约(Message Contract)和基于消息契约的序列化 在本篇文章中,我们将讨论WCF四大契约(服务契约、数据契约、消息契约和错误契约)之一的消息契约(Message Contract...比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式、文件大小等。...[第20篇] 服务在WCF体系中是如何被描述的? 任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源。...[第26篇] 如何导出WCF服务的元数据(Metadata)[实现篇][扩展篇] 元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框架体系中
它在现有WCF消息管道之上,构建简单的,基于非SOAP的HTTP服务。 它不像WCF REST service那样需要配置乏味的配置文件。 使用WEB API创建服务十分简单。...可以在应用程序或IIS或window service上承载。 WCF Rest 将WCF 作为 WCF Rest 服务使用,您必须启用 webHttpBindings....在WCF 和 WEB API之间如何选择? Ans....当您想创建一个可以使用快速传输通道的服务时,请选择WCF,如TCP,命名管道,或者甚至UDP(在WCF 4.5),并且当所有其他通道不可用时能够支持HTTP传输信道。...像ASP.NET MVC5那样,可以在WEB API2的controller级别和action级别定义特性路由: Controller level routing(控制器级别路由) 在控制器级别定义的特性路由将应用到所有
在本篇文章中,我们将讨论WCF四大契约(服务契约、数据契约、消息契约和错误契约)之一的消息契约(Message Contract)。...,在服务契约中已经对保护级别作了简单的介绍,WCF中通过System.Net.Security.ProtectionLevel枚举定义消息的保护级别。...注:在《WCF技术剖析(卷1)》中的第六章有对SOAP 1.2的基本规范有一个大致的介绍,读者也可以直接访问W3C网站下载官方文档。...在WCF体系中,MessageFormatter负责序列化和反序列化任务(在《WCF技术剖析(卷1)》中的第5章对基于MessageFormatter的序列化机制有详细的介绍):ClientMessageFormatter...的客户端框架是如何通过ClientMessageFormatter将操作方法调用连同输入参数转换成请求消息的。
整个WCF事务还有一个重要的步骤需要实现:如何将通过OperationBehaviorAttribute特性标记为TransactionRequired的操作的执行自动纳入到流入的事务之中。...该消息属性在消息中的Key为TransactionMessageProperty,即类型的名称。...TransactionScope对象的其他一些属性,比如超时时限、隔离级别等采用通过服务行为指定的值。...一步步创建一个完整的分布式事务应用》的实例演示中我们谈到,即使我们将绑定采用的事务处理协议设置成WS-AT,并且在DTC中对WS-AT进行了正确的设置,WCF运行时仍有可能采用OleTx协议进行事务处理...接下来我们将介绍在不同的应用场景下将绑定的事务类型设置成WS-AT,分布式事务的实现真正采用的实现方式: 场景1:WCF客户端和服务端不部属于同一台主机,不论是OleTxUpgradeEnabled作何设置
领取专属 10元无门槛券
手把手带您无忧上云