首页 / 软件开发 / WCF / 《WCF技术内幕》翻译2:《WCF技术内幕》绪论
《WCF技术内幕》翻译2:《WCF技术内幕》绪论2011-05-28 博客园 译:Frank Xu Lei总述服务是现代软件架构的一个主要部分,WCF是构建基于Microsoft Windows系 统的服务程序平台。WCF编写的服务可以与其它供应商的服务交互(例如, IBM, BEA, and Novell),WCF为行业标准的演化提供了足够的空间。对于传输,WCF 支持TCP/IP、HTTP、 Microsoft消息队列 (MSMQ)、命名管道。WCF同样支持一系 列WS-*规范(读作WS-星)协议,比如WS-Addressing, WS-ReliableMessaging (WS-RM), WS-AtomicTransaction (WS-AT), WS-Security, WS- SecureConversation, WS-Trust, 和WS-Federation。使用WCF的应用可以收发 SOAP消息和朴素的旧XML消息。将来,微软会扩展WCF支持新的传输、协议、和消 息结构。微软把WCF当做服务的IO系统。尽管将来无法确定,但是可以肯定地说 在可预见的将来微软不会使用其它技术取代WCF。许多产品象微软BizTalk Server和 Windows Live Server都兼容了WCF就是很好的证明。这本书的目标就是是读者具备使用WCF设计、开发、和维护服务必要的知识。 在我看来,这些任务超出了单独的WCF编程模型。成功需要理解服务背后的原则 、WCF服务编程模型、和WCF底层架构。这种组织并不是新的理念;它来自于过去的经验。当面向对象变的流行以后 ,从面向过程到面向对象转变的开发者和架构师需要了解远不止编程语言的语法 。如果面向过程的开发者在不了解面向对象情况下开始使用现代的编程语言,他 们只能使用新语言来创建面向过程的应用。虽然这些代码可以编译和运行,但是 他们不可能使用面向对象语言的许多特性。这个就是我关于不能体会面向服务的 优势而去学习WCF开发者的看法。有些人认为这种方法是在浪费时间。换句换说,WCF团队已经从正常的编程模 型里成功抽象出消息底层架构,这样就没有必要去学习底层的面向服务的模式, 或者 WCF如何实现这些模式。我完全不认同这个观点。这种抽象可以使得WCF团 队更快地开发。但是它绝对没有完全解放开发者和架构师转到面向服务和理解 WCF 内部如何工作的重任。成功的接受象C++或者JAVA面向对象语言需要开发者 从面向过程到面向对象转变他们的思维,相同的是,WCF的学习者也需要从面向 组件到面向服务去提升自己的认知。如果我们转变失败,我们将会遇到许多缺少 面向服务特征的风险。简单编写WCF程序和编译、运行只是万里长征的一小步。 从长远来看理解WCF技术内幕和理解新的编程模式同等重要。虽然我们不理解面向服务架构的特征,但是我们应该知道WCF的底层架构。换 句话说,我们应该了解我们的平台。通用语言运行时(CLR)对于这种情况提供 了支持性的事实。CLR团队干的很漂亮,他们从开发者那里抽象出垃圾收集器和 JIT编译器。结果,在不懂或者很少知道这些子系统如何工作的情况下,我们就 可以写出Microsoft .NET Framework应用程序。比如,迁移到C#的C++开发者, 在不知道垃圾收集器的情况下,会本能地为每个声明的类型增加一个finalizer 。不知不觉地,这个开发者就会增加分配的时间和这些对象的声明周期。对于大 多数C++开发者来说,简单说一句“不要这样做”是不够的。他们想知道为什么 。技术上来说,为一个类型增加一个finalizer不是个bug,单身它确实是许多书 籍和培训课程耗费许多时间要强调的东西。同理,知道WCF底层架构可以避免在WCF上浪费不必要的精力,并且开发者可 以调整他们的程序功能去满足业务需求。例如,在构造函数里改变绑定的可靠消 息参数可以动态地调节各个终结点之间的消息编排。WCF团队已经抽象去这些功 能并部分通过绑定暴露出来。这种消息编排有时是必要的,并且只有理解消息编 排的开发者才能正确决定何时使用这个特性。进一步讲,想调试一个使用可靠消 息的程序就必须掌握可靠消息的配置。我希望此书可以在面向服务的关键概念、WCF服务编程模型、和WCF底层架构 之间取得平衡。本书将给你一个了解WCF技术内幕的严谨视野,你可以设计、构 建、调试、维护可扩展和可靠的分布式应用。1.面向的读者:这本书适合那些想学习如何设计、编写、或者测试WCF分布式应用的架构师、 开发人员、和测试人员。本书的前面一些章节对想学习更多或者评估WCF的业务 决策者也有帮助。这本书不适合初级开发者或刚学习.NET Framework编程的开发 者。倘若如此,我推荐你在阅读本书之前先阅读Jeffrey Richter的CLR via C# (Microsoft Press, 2006)或者Jeff Prosise的Microsoft .NET 编程(Microsoft Press, 2002)。如果你是熟悉一些分布式应用开发的阅读者,将会有所帮助。但 是不是必须的。