写点什么

书籍推荐:Windows Communication Foundation 本质论

  • 2009-02-08
  • 本文字数:1998 字

    阅读完需:约 7 分钟

随着 WCF 3.5 的发布,微软修改了它的 API、Web 服务基础架构以及在 Visual Studio 2008 下的工具。Addison Wesley 出版了《 Windows Communication Foundation 本质论》一书,作者为 Steve Resnick、Richard Crane 和 Chris Bowen,旨在为开发人员提供一个紧密依赖于样例代码的路线图。

下面是作者简短的问题解答,你也可以向作者提出问题或发表评论:

Q:从 2.0 发展到 3.5,WCF 的最大区别是什么?开发人员应该了解它们中的哪些内容?

我将这些区别分为三类。第一类是对 REST 风格编程的支持,这种风格对开发人员来说比 SOAP 更加友好。在 3.5 中,WCF 包含了 URI 模版,负责映射 Web 地址和 HTTP 动词,这是为了实现 JSON 和 RSS 格式,以及实现二进制流。第二类则是 WCF 与.NET 中的 WF 的集成。这一功能非常强大,因为 WCF 和 WF 实际上就是一块硬币的两面:WCF 是服务的接口和宿主环境,而 WF 则实现它的处理逻辑。WCF 3.5 的第三个明显变化实际上是在 Visual Studio 2008 中,它提供了针对 WCF 的设计与调试工具。包含了用途广泛的 WCF 和 WF 模版,以及一些现有的工具,例如使用 WcfSvcHost 和 WCFTestClient 可以简化测试。

Q:在 WCF 3.5 中,你最感兴趣的新特性是什么?为什么?

我想,WCF 3.5 支持 REST 协议的方式实在是太酷了。为了弄清楚概念,我们可以看看 SOAP 和 REST 之间的显著区别。SOAP 主要关注的是动作(动词),而 REST 则面向的是实体(名词)。由于 WCF 采用的是“行为”的架构,因此在这两者之间切换时,并不需要做大的修改。我发现一个神奇之处就是,你可以在两个架构模型(REST vs. SOAP)之间切换,而应用程序中 90% 的代码都是完全相同的。

Q:在设计和实现服务时,你对架构师和开发人员有什么指导意见?

正如你需要对你的应用程序所支持的特性分优先级一样,你也应该对基础架构进行优先级的划分。例如,判断哪一个是最重要的……性能,可伸缩性,可管理性,互操作性,安全,还是上市时间?一旦你划定了优先级,再来看你的选择。对于每一项,都要选择最简单的选项以符合你的需求。如果你正在寻求标准的基于 http 的访问,以及自定义(用户 ID/ 密码)的授权机制,就可以使用 basicHttpBinding,并采用 IIS 作为宿主。但如果你需要在一个内部网络中获得最好的性能,可以考虑使用 Windows 激活服务(在 Windows 2008 中)作为宿主,并选择 netTcpBinding。此外,.NET 3.5 提供了很棒的诊断工具。学习使用服务跟踪工具可以节省你的时间。

Q:为什么开发人员要基于非 SOAP 的服务使用 WCF,例如 JSON 和 AJAX?

WCF 为服务提供了很好的支持,不管服务是通过 SOAP 还是其他协议公开。类似线程、实例化、审计、安全与托管等重要特性都不需要考虑协议。在 3.5 之前,通过 AJAX 应用程序访问一个 WCF 服务是相当困难的。但随着新版本提供的支持,同时又提供了大量可用的示例,实现就变得非常容易了。显然,简单的原因一部分是因为协议,而 WCF 提供的其他特性(线程、安全等)又为我们节省了时间。

Q:在用于跟踪或调试 WCF 服务的工具中,你是否有自己喜爱的工具与社区分享?

首先,在 WCF 中有一个内置的端对端的跟踪工具和日志记录工具,跟踪消息发送与接收的处理过程都会非常简单。还有一个查看器,可以展示过程中的每一步,甚至可以在检测到失败时用红色来标注相关的代码。服务配置编辑器(Service Configuration Editor)使得跟踪选项可以方便的启用或关闭。其次,你还可以使用性能计数器(performance counters)操作服务,这样就能够监视应用程序的关键特性。这不仅对于开发很有帮助,也十分有利于产品环境。最后,你还可以使用 WCF Behaviors 创建自己的审计工具与日志工具。你可以将日志记录到数据库,队列,或其他最合适的地方。

Q:什么问题是你最常见的?你可否预先给出一个回答呢?

每个人都会问到性能。当然这是一个复杂的话题,因为它要依赖于需要的特性而定!例如,如果你需要能够互操作的消息层的安全,你可以使用 WS- Security、Text 编码和 HTTP 以应对广泛的要求。它可以使用 wsHttpBinding 进行事先配置。另一方面,如果你要控制客户端、服务和网络,则可以使用二进制编码,并使用 TCP 协议。它可以使用 netTcpBinding 进行预先配置,并能够提高 5 倍的性能。而且这不需要修改任何代码。实例化同样如此。你是否需要让你的类是单线程的?或者允许 WCF 能够在同一时间有多个实例?处理后者的更好方式是并发。WCF 通过 InstanceContext 设置支持每种模型。而且,WCF 提供了足够的灵活性以调整性能来符合你的需求。这实在是太酷了!

很高兴,InfoQ 能够为我们的读者提供《Windows Communication Foundation 本质论》一书的第13 章

查看英文原文: Book Published: Essential Windows Communication Foundation


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2009-02-08 18:003869
用户头像

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

关注

评论

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

Gas费用持续攀升!NA公链NAC公链如何破解高额Gas费用的困局?

区块链第一资讯

【LeetCode】删除排序链表中的重复元素 IIJava题解

Albert

算法 LeetCode 3月日更

区块链六大应用场景,推动政府信息化发展

13828808769

区块链+ #区块链#

基于深度学习的两种信源信道联合编码

华为云开发者联盟

深度学习 通信 编码 信源编码 信道编码

推荐 2 款必备的 Django 开发神器

星安果

Python django Web 后端

电子证照上链--助推智慧政务

13530558032

设计与思考,关于资源和生命周期

程序员架构进阶

设计实践 生命周期 28天写作 3月日更 池化技术

智慧公安信息化管理系统,重点人员管控系统的搭建

13828808769

智慧交通

Worktile 前端工程化之路

PingCode研发中心

大前端

如何正确使用Python临时文件

华为云开发者联盟

Python 安全 临时文件 tempfile 库函数

Python基础之:Python中的模块

程序那些事

Python Python3 程序那些事

QCon全球软件开发大会:推动创新,实现技术落地

博文视点Broadview

华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用

华为云开发者联盟

数据库 redis 华为云 GaussDB Feed流

一段java代码执行旅程

华为云开发者联盟

JVM class 指令 java代码 java栈

低代码是什么?低代码价值主要体现在哪?

优秀

低代码

分布式锁的实现方案

360技术

区块链BaaS应用平台搭建,助力企业运用区块链解决业务问题

13828808769

区块链 区块链+ 区块链发展 #区块链#

主数据建设的挑战与发展

EAWorld

​Autonomous Dream Works的独创力杰作EGGNetwork EFTalk

币圈那点事

异步机制和CPU架构对 Redis 性能的影响

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

网络连接之协议栈

Kylin

协议栈 3月日更 21天挑战 网络连接

Datadog 能成为最大的云监控厂商吗

睿象云

运维 运维平台 Datadog 云监控

困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞

不脱发的程序猿

28天写作 硬件设计 嵌入式软件 单片机 3月日更

初识Golang之声明函数

Kylin

3月日更 21天挑战 Go 语言

搞懂 ZooKeeper 集群的数据同步

HelloGitHub

Java zookeeper ZooKeeper原理

能源绿色管控:天然气站启动数字化转型,工业企业该如何突围?

一只数据鲸鱼

物联网 数据可视化 智慧城市 能源管理 天然气

通俗讲解分布式锁,看完不懂算我输

Java小咖秀

Java 分布式 多线程 并发

Golang号称最快的Json解析器速度可达5623ns/op

happlyfox

学习 3月日更 Go 语言

区块链中药溯源--区块链为中医药溯源认证

13530558032

力扣(LeetCode)刷题,简单题(第13期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

Rust从0到1-基础概念-数据类型

rust 数据类型

书籍推荐:Windows Communication Foundation本质论_SOA_James Vastbinder_InfoQ精选文章