[翻译]谈WCF的扩展功能
来博客园这么久了,经常翻看各位大牛的各类文章,可以说受益匪浅,也总想着自己写点什么,但本人肚子里的墨水实在有限。恰好这段时间需要学习下WCF知识,在网上溜达了半圈,找到一个挺好的系列,介绍了WCF4.0的扩展性。原文地址http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/14/wcf-extensibility.aspx,是英文的,不知道有没有同学看过或者翻译过。文章不难理解,不过为了能在学习过程中同时提高英文水平,我打算自己再重新翻译一遍。
首先声明一点,由于深受技术书籍呆板枯燥的翻译的折磨,本人并不会酌字酌句去对照着翻译,对于直译过来难以理解的句子我尽可能会换一种更加容易理解的说法,或者加入一些自己的理解(会以不同颜色的字体显示);有些不重要的和本主题无关的信息我也可能会略过不作翻译。本人刚接触WCF不久,技术能力和英文水平都不咋地,若写得不对请多多包涵并告知,感激不尽!
下面开始。
在接下来的一段时间我将写一个关于WCF4.0扩展功能的系列。众所周知,WCF是一个用来开发面向服务的分布式应用程序的强大框架。对于普通的应用,我们只要遵循既定的编码方式和绑定协议就能很好的完成任务。但是如果你想做些更深入的事情,就不会这么简单了。不过所有的问题(比如我在MSDN论坛和其它地方碰到的各种关于WCF的问题),都能通过运用某个WCF的扩展功能得到解决。
问题是在WCF的通信方面(包括序列化和服务模型)有30多个扩展功能,对于哪个可以应用到自己的方案中,估计很多人都会很困惑,而且有些方案可能需要多个扩展功能一起结合使用。我使用WCF可以追溯到6年前(那时候WCF还未发布),尚不敢说完全掌握了它们(扩展功能),这也是我写这个系列的一个原因。
在每篇文章中,我将谈论其中一个扩展功能。我的计划是提供一些可以在其中使用这个功能的方案,并给出代码示例。我还会谈谈这个功能的不同用法,有些技巧是MSDN官方文档也找不到的哟。
下面是这个系列的计划列表,可能会有改动。
1. Service model extensibility
1.1. Behaviors
1.1.1. IServiceBehavior
1.1.2. IContractBehavior
1.1.3. IEndpointBehavior
1.1.4. IOperationBehavior
1.2. WCF Runtime
1.2.1. Message interception
1.2.1.1. I[Client/Dispatch]MessageInspector
1.2.1.2. IParameterInspector
1.2.2. Mapping between message and operation parameter
1.2.2.1. I[Client/Dispatch]MessageFormatter
1.2.3. Mapping between message and CLR operations
1.2.3.1. I[Client/Dispatch]OperationSelector
1.2.3.2. IOperationInvoker
1.2.4. Instance creation
1.2.4.1. IInstanceProvider
1.2.4.2. IInstanceContextProvider
1.2.5. Error handling
1.2.5.1. IErrorHandler
1.2.6. Others
1.2.6.1. ICallContextInitializer
1.2.6.2. IChannelInitializer
1.2.6.3. IInteractiveChannelInitializer
1.3. Exposing / consuming metadata
1.3.1. IWsdlPolicy[Import/Export]Extension
1.4. Configuration
1.4.1. BehaviorExtensionElement
1.4.2. BindingElementExtensionElement / StandardBindingElement / StandardBindingCollectionElement
1.5. Web Hosting
1.5.1. ServiceHostFactory
1.6. WCF REST (3.5 / 4.0 model)
1.6.1. QueryStringConverter
1.6.2. Extending WebHttpBehavior
1.7. WCF Web APIs (4.0 / Codeplex model)
1.7.1. Message Handlers
1.7.2. Operation Handlers
1.8. Others
1.8.1. IExtensibleObject<T>
1.8.2. IExtension<T>
1.8.3. IExtensionCollection<T>
2. Channel extensibility
2.1. Message encoders
2.2. Protocol channels (client)
2.3. Protocol channels (server)
2.3. Transport channels
3. Serialization extensibility
3.1. Serialization callbacks (On[Ser/Deser]ializ[ing/ed])
3.2. IDataContractSurrogate
3.3. DataContractResolver
3.4. IExtensibleDataObject
4. Other non-orthodox extensibility points
4.1. Hooking into the tracing mechanism
5. Miscellaneous extensibility scenarios
5.1. Custom serialization in Silverlight 4
5.2. Extensibility in Windows Phone / Silverlight 3
5.3. WCF RIA Services
希望各位对此感兴趣,并给予反馈。
顺便说一句,WCF团队意识到这个框架虽然强大,但有时难以使用。在下个版本中,可以看到其中改善的一点——对WCF服务的创建、配置、调用都将变得更简单。