艾伟:WCF从理论到实践(6):WCF架构

简介: 本系列文章导航WCF从理论到实践(1):揭开神秘面纱WCF从理论到实践(2):决战紫禁之巅WCF从理论到实践(3):八号当铺之黑色契约WCF从理论到实践(4):路在何方WCF从理论到实践(5):Binding细解WCF从理论到实践(6):WCF架构WCF从理论到实践(7):消息交换模式...

本系列文章导航

WCF从理论到实践(1):揭开神秘面纱

WCF从理论到实践(2):决战紫禁之巅

WCF从理论到实践(3):八号当铺之黑色契约

WCF从理论到实践(4):路在何方

WCF从理论到实践(5):Binding细解

WCF从理论到实践(6):WCF架构

WCF从理论到实践(7):消息交换模式

WCF从理论到实践(8):事件广播

WCF从理论到实践(9):实例模式和对象生命周期

WCF从理论到实践(10):异常处理

WCF从理论到实践(11)-异步

WCF从理论到实践(12):事务

WCF从理论到实践(13):事务投票

WCF从理论到实践(14):WCF解决方案模板

WCF从理论到实践(15):响应变化

WCF从理论到实践(16):操作重载(带视频+ppt+源码)

WCF从理论到实践(17):OO大背离(带视频+ppt+源码)

前面的几篇文章,分别介绍了WCF的基本知识和Endpoint的三个重要组成部分:Address,Contract,Binding。但无非管中窥豹而已,本文就阐述一下WCF的架构,从整体的角度来重新对WCF加深认识。

本文的出发点:

通过阅读本文,能使您获得以下知识:

  1. WCF的架构图
  2. WCF架构的关键元素及其概念
  3. 创建一示例程序,并对其按架构图进行解析

     

本文适合的读者:

本文适合WCF初学者,以前可以对WCF一无所知,本文只作介绍,不涉及WCF技术具体技术难点和介绍。

 

WCF的架构图

下图为WCF的架构图:

 

WCF架构的关键元素及其概念

Contracts and Description (协定和说明):

协定定义消息系统的各个方面。包括Data Contract(数据协定),Message Contract(消息协定) ,Service Contract(服务协定)。Data Contract是WCF中 Service与Client端之间用来交换的数据的格式定义,它采用Xml 架构定义语言(XSD)来定义,使得服务端和客户端都能理解数据格式定义。消息协定能定义消息的特定部分,默认情况下 ,WCF的消息是由固定格式的,但某些情况下,也可以使用Message Contrace来自定义消息格式。服务协定指定服务端公开的方法签名,这些方法能够在远程被调用。举个国家和间谍的例子,A 是国家C派往其它国家的一名间谍,他负责收集情报,被通过某种特定的渠道,将获得的情报发送给国家C,假如A在出去执行任务之前,国家C的特工部门为其编订了一套密文,这个密文只有国家C和特工部门和A知道具体含义,这些密文正是在A与其国家之间进行传递的数据,国家C对密文的制定,正是WCF中对交换数据格式的定义,属于Data Contract范畴,而A在获得情报之后,通过电报的方式将情报发回给国家情报机关,它首先设置电报的发送地址并注明来源,并且将情报信息编码成密文进行发送,对电报报文的格式定义就属于Message Contract范畴,而国家情报机关为A要想接受和对A发送任务命令,必须也提供固定的通讯设施和人,这些能够被A所联络上的通讯设施和人就属于 Service Contract的范畴。

Service Runtime(服务运行时)

上面说的协定是在开发wcf服务时候制定的,而服务运行时,是在服务实际运行时候地一些行为控制。ErrorBehavior是在服务出现错误的时候发生的操作,ThrottingBehavior能够限制创建多少个实例和会话,通过这个您能够控制WCF服务的性能,MetaBehavior(元数据行为) 控制是否和如何向外部提供元数据。TransactionBehavior能定义事务性,使得当发生异常的时候能进行回滚。 DispatchBehavior(调度行为)能控制WCF处理消息的方式,通过扩展性功能可以自定义运行时进程。 例如,消息检查功能用于检查消息的各个部分,使用参数筛选功能可以根据作用于消息头的筛选器来执行预设操作。下图显示了WCF的消息处理流程

 

Messaging(消息传递)

在WCF中,消息是在通道(Channel)中进行传递的。通道是以某种方式对消息进行处理的组件 。一组通道可以组合成"通道堆栈",主要有两大种通道:协议通道和传输通道。协议通道说明数据的格式和交换模式,WS-Security是对在消息层启用安全性的 WS-Security 规范的实现。 通过 WS-Reliable Messaging 通道可以保证消息的传递。 编码器提供了大量的编码,可使用这些编码来满足消息的需要。 HTTP 通道指定应使用超文本传输协议来传递消息。 同理,TCP 通道指定 TCP 协议。 事务流通道控制已经过事务处理的消息模式。 通过命名管道通道可以进行进程间通信。 使用 MSMQ 通道可以与 MSMQ 应用程序进行互操作。

Activation and Hosting(激活和承载)

WCF服务的最终形式仍然是程序,它能够"自承载",也可以寄宿到其它应用程序之中 ,如IIS,Windows激活服务,Com+等。

创建一示例程序,并对其按架构图进行解析

创建一个最简单的WCF服务,并利用上述的架构对其解析

打开vs2008,创建一个Wcf Application,命名为WcfSample1 ,如下图所示:

我们就利用系统模板产生的文件来进行解析,完成上步中,会自动产生如下的项目:

打开IService.cs,

为了简单的阐述MessageContract,我们新建一个CustomMessage.cs,代码如下:

为使用该服务,我们再创建一个ServiceContract接口和其具体实现,分别为:IMessagingHello.cs和MessageHello.svc

在web.config作如下的配置:

创建一个客户端应用项目Client用于消费上面创建的服务,创建项目后,添加Service引用,如下图所示:

分别添加对MessageHello.svc和Service1.svc的引用后,在programe.cs中添加如下代码:

用tcpTrace来监听自定义报文,可以得到

发送的消息报文为:

jillzhang

而接受到消息报文为:

Served by object 63334862.Service received: jillzhang

从而可知MessageContract已经起了作用。

有关如何用tcpTrace监视消息报文,参见:http://www.cnblogs.com/artech/archive/2007/06/14/782845.html

 

本文参考文章

  1. http://www.cnblogs.com/artech/archive/2007/06/14/782845.html
  2.  

本文示例项目

  1. 服务端和客户端: /Files/jillzhang/WcfSample1.rar
  2. 自定义消息的log文件: /Files/jillzhang/cumtommsg.txt
目录
相关文章
|
4月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
323 47
|
4月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
293 0
|
5月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
5月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
219 0
|
4月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
5月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
5月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
964 1
|
6月前
|
存储 自然语言处理 前端开发
百亿级知识库解决方案:从零带你构建高并发RAG架构(附实践代码)
本文详解构建高效RAG系统的关键技术,涵盖基础架构、高级查询转换、智能路由、索引优化、噪声控制与端到端评估,助你打造稳定、精准的检索增强生成系统。
1371 2
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
504 0
|
6月前
|
机器学习/深度学习 人工智能 算法