WCF 内置了很多Binding,而很多Binding其实主要是TransportElement 和 EncodingElement以及一些额外特性(比如安全,可靠消息传递等)的组合。
对于扩展而言,有时候我们需要去自定义实现一个Binding。这时候你可以去修改binding的一些参数。或者自己去组合一个binding使用Custom binding。比如选择使用Http作为Transport,而 Encoding选择BinaryMessageENcoding。而有时候我们希望自己去实现一个TransportElement。这时候你会发现有很多代码要你实现。如果你用reflector看一下所有关于NetMsmqBinding的代码就会发现不止是实现一两个接口那么简单。
你要去实现InputChannel,OutputChannel, MetaData import,Export 等。
现在的话,你可以用WCF LOB Adapter SDK 很快的实现一个自己的Binding。
WCF LOB Adapter SDK 安装好之后,他在WCF 模型的基础之上作了一个Framework.另外帮你多了一个项目模板。你要做了的只是点击向导。然后加上自己的实现就行了。他自动生成的框架代码,都有详细的注释。告诉你该做什么。
简单实现一个outputhandler
| 以下是引用片段: namespace Contoso.CustomAdapter { public class ContosoCustomAdapterOutboundHandler : ContosoCustomAdapterHandlerBase, IOutboundHandler { /**//// /// Initializes a new instance of the ContosoCustomAdapterOutboundHandler class /// public ContosoCustomAdapterOutboundHandler(ContosoCustomAdapterConnection connection , MetadataLookup metadataLookup) : base(connection, metadataLookup) { } IOutboundHandler Members#region IOutboundHandler Members /**//// /// Executes the request message on the target system and returns a response message. /// If there isn抰 a response, this method should return null /// public Message Execute(Message message, TimeSpan timeout) { // //TODO: Implement Execute // Console.WriteLine("Incoming Message {0}", message.GetReaderAtBodyContents().ReadInnerXml()); Message rm=Message.CreateMessage(MessageVersion.None,"","A message From WCF Adapter"); return rm; } #endregion IOutboundHandler Members } } |
这个Adapter的下载地址: