写点什么

在.NET Framework 3.5 中的 WCF 通信选项

  • 2008-01-24
  • 本文字数:3019 字

    阅读完需:约 10 分钟

Chappell & Associates 的负责人 David Chappell 在他撰写的一篇白皮书《处理多样性:理解.NET Framework 3.5 中的WCF 通信选项》中,为我们展现了WCF 所提供的各种通信方式。

针对分布式系统开发中会遇到的各种通信选项,微软发布的 Windows Communication Foundation 为其提供了一种单一的编程模型。这一组选项涵盖了从内部处理通信到端对端网络通信的诸多方面。在过去,每一种通信模型都对应了一种特定的编程模型。“如果为多种通信方式提供一个通用的编程模型,就能够帮助开发者有效地处理各种多样性”,David Chappell 说道。

白皮书一开始就介绍了两种主要的负责处理多样性的 WCF 概念:

从一开始,WCF 的创建者就认识到应用程序会有多个不同的通信需求。同时,他们也确信会有新的通信方式不断出现。为了应对这样的现实问题,WCF 提供了一个通用的体系架构,以支持不同的通信方式。这种体系架构最突出的两个理念就是通道与绑定 […]。

在 WCF 中,每一次交互可以被看作是一次消息交换。消息包含了一次访问负载以及在一次传输过程任意数量的基础设施数据。为了处理不同的现有以及未来的通信方式,WCF 引入了通道模型。每种通道对应一个特定的基础设施方向,例如安全性或者可靠性。一套完整的基础设施需要一个单独的通信选项,而该选项则由预先定义或自定义的通道堆栈进行处理:

无论是客户端,还是服务,或者两者,通过 WCF 进行通信的所有软件均依赖于一个或多个通道。[…] 通道堆栈基于 WCF 客户端或服务与它所依赖的通信机制之间进行创建。在堆栈中最底层的通道所做的工作是相同的,即负责将要传递的消息与用来传输该消息的相关机制映射起来。因此,这一最底层的组件通常被称之为“传输通道”。

WCF 通过引入绑定的方式允许对通道堆栈进行便捷的配置与定义:

通过指定一个特定的绑定,WCF 客户端或者服务隐式地创建了实现一组特定通信行为的通道堆栈。[…] 一个特定的 WCF 接口所定义的服务可以通过该绑定进行访问 […] 或者通过多个绑定同时进行访问 […]。

下面的内容阐释了 David Chappell 所介绍的.NET Framework 3.5 提供的所有通信选项的体系架构:

SOAP 和 WS-* Web Service

作为微软推出的针对面向服务体系架构的技术,WCF 的构建目的在于开发 SOAP/WS-* 的 Web Service:

  • WCF 允许传递基于任意传输类型例如 HTTP 或 TCP 的 SOAP/WS-* 消息。
  • 支持最重要的 WS- 规格 - 在.NET Framework 3.5 的 MSDN 文档中,提供了一个扩展的概要介绍《由系统提供的互操作性绑定支持的 Web Service 协议》。
  • 能够强制要求服务遵循 Web Services Interoperability Organization (WS-I) Basic Profile 1.0。
  • WCF 针对通用的 Web 服务场景提供了一套预定义的绑定。

WCF 应用程序之间的二进制通信

适用于 WCF 到 WCF 之间的通信 > WCF 支持使用更加有效的二进制编码方式进行通信。不仅可以通过 HTTP 传递标准的基于 XML 的 SOAP 消息,开发者还可以选择直接通过 TCP 传递在表示方式上更加有效的相同的信息。

REST 化(RESTful)的 Web Service

由于 REST 方式的 Web Service 越来越普及,因此在.NET Framework 3.5 中,WCF 也支持 REST 方式。事实上,虽然 WCF 的第一个版本专注于基于 SOAP 的服务,但是“通用的通道模型完全能够添加对 REST 通信最直接的支持”。首先,WCF 消息必须去除 SOAP 信封以及标头,这一点可以使用新增加的 WebHttpBinding:

与 [其他的] 基于 HTTP 的绑定不同 […],该绑定使用了一个编码项 WebMessageEncoding,这是.NET Framework 3.5 版本中的 WCF 新增加的特性。该选项不会添加或移除 SOAP 标头。相反,它会为呈现的内容实现三种不同的选项:基于文本的 XML 编码,JSON 编码和不透明的二进制编码,后者对于某些场景会非常有用,例如传递 JPEG 文件。作为一种 HTTP 绑定,出于安全性考虑,WebHttpBinding 同样可以被配置为使用 HTTPS。

操作会被映射为 HTTP 动作,例如 GET,PUT,POST 或者 DELETE,可以通过 WebGet 或 WebInvoke 特性在 WCF 的服务契约上进行标记。因为 REST 方式“必然意味着要操作 URIs”,WCF 提供某种手段来负责管理“大量相似的 URIs”:URI 模板。“这些模板的目的在于简化开发者表示 URI 模式以及处理匹配这些模式的 UIRs 的工作”

POX 与 Syndication(RSS,ATOM)

使用 WCF 的 REST 模式,可以发送 POX(Plain Old XML)消息或者使用联合(Syndication)格式。

POX,RSS 和 ATOM 均为格式,而非协议。正因为此,并不需要特定的 WCF 绑定来使用它们。通常,它们都可以直接通过 HTTP 进行传送,由于没有 SOAP 标头,因此绑定的最佳选择是使用 WebHttpBinding。

商务营运(LOB)应用程序的通信

WCF 支持正在开发的客户端与不提供 Web Service 接口的应用程序之间的通信:

对此,一个重要的范例就是与 LOB 应用程序的通信,例如 SAP。[…]

对此的支持正是 WCF Line-of-Business (LOB) Adapter SDK 的目标。正如“SDK”其名所示,该技术自身并不包含任何适配器。相反,它提供了一些工具和运行时环境以帮助创建面向 LOB 应用程序的适配器。然后,应用程序的开发者就可以使用这些适配器创建 WCF 客户端,以调用 LOB 应用程序的服务,就好似该应用程序就是一个普通的 WCF 服务那样。

通过消息队列进行通信

为了使用消息队列进行通信

[…] WCF 提供了一个 MSMQ 传输通道。若要使用队列通信,开发者可以创建一个标准的 WCF 服务,并按照通常的方式为该服务接口以及方法分别标记 ServiceContract 标志和 OperationContract 标志。同时,应该将接口中每个操作的 OperationContract 标志的 IsOneWay 属性标记为 true。[…]

只有二进制消息可以通过 MSMQ 进行传送,该消息既可以被 SOAP 信封所包裹,也可以不使用 SOAP 信封。 通过 Windows 点对点(Peer-To-Peer)网络的通信

Windows 点对点网络主要用于协作场景。在端系统中,单台 PC 机同时作为客户端与服务器(多个端点)

通常,WCF 应用程序可以通过指定正确的绑定使用 Windows 端对端网络。NetPeerTcpBinding[…] 依赖于指定了端通信的传输通道。该绑定也可以被置于 PnrpPeerResolver 通道中,通过它处理传送时的寻址操作,以使得消息能够传递到指定的端系统图中。

内进程通信

WCF 支持 [同一台机器进程之间的通信],使用的绑定为 NetNamedPipeBinding[…]。 它并不依赖于实现了网络协议如 HTTP 或 TCP 的传输通道,而是使用命名管道进行通信的传输通道,这是内进程通信的一个标准 Windows 机制。

自定义通信

WCF 提供了多种扩展与定制通信选项的途径。开发者可以创建定制通道,定制绑定以及自定义现有的绑定。Davide Chappell 在文章 Microsoft BizTalk Services 中“提供了对此技术的有趣的阐释”。

根据 David Chappell 所述,“针对通信的一个具有通用目的的平台意义非凡”。WCF“利用一个通用的框架提供对多种通信方式的支持”,并且易于扩展和定制。

查看英文原文: WCF Communication Options in the .NET Framework 3.5


译者介绍:张逸(Bruce Zhang),毕业于四川大学计算机学院,文学爱好者,微软最有价值专家(MVP)。曾先后任职中兴通讯重庆研究所以及惠普 GDCC。拥有 10 年左右的软件开发与 5 年左右的软件架构设计经验,熟悉 C#,ASP.NET,Web Service,.NET Remoting,WCF 等技术。在面向对象领域具有一定造诣,特别是设计模式、测试驱动开发、极限编程与 UML 等技术与思想的运用。目前,主要从事 SOA 企业信息解决方案的设计与研究。著作 / 译作包括《软件设计精要与模式》、《WCF 服务编程》。他的个人主页为 http://www.brucezhang.com。

2008-01-24 21:311799
用户头像

发布了 109 篇内容, 共 40.9 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

数据可视化设计四大原则透析

搞大屏的小北

数据可视化 设计要素 大屏设计

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

千万级数据的可视化交互展示:Vue.js 技术解析

xfgg

Vue eCharts 6 月 优质更文活动

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

敏捷教练

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

WorkPlus

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

赋能矿山 | KaiwuDB 智慧矿山解决方案

KaiwuDB

解决方案 智慧矿山 KaiwuDB

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

百度Geek说

人工智能 百度 企业号 6 月 PK 榜

数据分析:电子商务需要关注的重要指标有哪些?

搞大屏的小北

电子商务 销售指标

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

平台即产品:数字化转型的全新驱动力

SEAL安全

平台工程 平台即产品

Win服务器图床配置

路北路陈

6 月 优质更文活动

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

喜讯 | 华秋电子荣获证券时报年度高成长企业

华秋电子

通过技术变革,推动全面预算管理前行

智达方通

全面预算管理

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

对线面试官-线程池(四)

派大星

Java 面试题

深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

在.NET Framework 3.5中的WCF通信选项_SOA_Hartmut Wilms_InfoQ精选文章