WCF框架是由微软研发的一款基于通信等方面的跨平台的解决方案。在实际使用中,体现了非常强大的功能。WCF适配器在接收消息时使用非类型化消息协定。#t#
通过使用非类型化消息协定,WCF 适配器可从客户端接收任何类型的 WCF 消息。您可通过 BizTalk 管理控制台中的“入站 BizTalk 消息正文”选项指定如何从传入 WCF 消息创建 BizTalk 消息。
下表中的 WCF 适配器服务协定用作 WCF 接收适配器的非类型化消息协定。
ITwoWayAsync 接口
用于 WCF 请求-响应接收位置。WCF适配器异步处理通过此接口传入的消息。
ITwoWayAsyncVoid 接口
用于不支持事务协议的 WCF 单向接收位置,WCF-NetMsmq 适配器除外。WCF适配器异步处理通过此接口传入的消息。
ITwoWayAsyncVoidTxn 接口
用于支持事务协议的 WCF 单向接收位置,WCF-NetMsmq 适配器除外。WCF适配器异步处理通过此接口传入的消息。
IOneWayAsync 接口
用于 WCF-NetMsmq 单向非事务性接收位置。WCF适配器异步处理通过此接口传入的消息。
IOneWayAsyncTxn 接口
用于 WCF-NetMsmq 单向事务性接收位置。WCF适配器异步处理通过此接口传入的消息。
BizTalkServiceInstance 类
实现WCF适配器用于接收传入消息的服务协定。WCF 适配器为每个接收位置创建一个单独的 ServiceHost 和此类的单个服务对象,以便在运行 WCF 接收位置的 BizTalk 主机实例的生存期内处理客户端请求。该服务对象使用多个线程来并行处理消息,除非 WCF-NetMsmq 接收位置与所选定的“按序处理”属性一起使用。
WCF 适配器根据 WCF 接收位置中配置的通道堆栈,来选择某个 WCF 服务协定以接收消息。
对于标准 WCF 适配器,通道堆栈是由接收位置的 WCF 配置属性自动配置的。为了确定使用哪个服务协定,WCF 适配器将针对 WCF 接收位置的绑定调用带有 IReplyChannel、IReplySessionChannel 和 IDuplexSessionChannel 的 Binding.CanBuildChannelListener 方法。
如果任一方法调用返回 True,则使用以 ITwoWayAsync 开始的服务协定来确保至少一次送达。否则,将使用以 IOneWayAsync 开始的服务协定来接收消息。接着,WCF适配器将为以下情况选择以 Txn 结尾的服务协定:
TransactionFlowBindingElement 被添加到启用了事务流的通道堆栈。
MsmqTransportBindingElement 被添加到 ExactlyOnce 属性设置为 True 的通道堆栈。
实现 ITransactedBindingElement 的绑定元素被添加到 TransactedReceiveEnabled 属性设置为 True 的绑定。
如果为 WCF 请求-响应接收位置添加了 OneWayBindingElement,则通过该接收位置传入的消息可能会丢失,因为 OneWayBindingElement 在将消息调度到WCF适配器之前即生成了一个虚拟响应。