对WCF的可靠会话编程有一定了解的人应该知道,我们可以使用 DeliveryRequirementsAttribute 可以指示WCF确认绑定提供服务或客户端实现所需的功能。如果在从应用程序配置文件加载服务说明或在代码中以编程方式生成服务说明时检测到 DeliveryRequirementsAttribute 属性,则 WCF 会验证所配置的绑定,并支持该属性指定的所有功能。例如,您的服务可能要求绑定支持队列。使用 DeliveryRequirementsAttribute 可以让WCF 确认是否满足下列要求:
-
QueuedDeliveryRequirements 属性指定绑定必须满足的队列要求。
-
RequireOrderedDelivery 属性指示绑定是否必须支持有序消息传递。
-
TargetContract 属性指示要求所适用的类型。
但是,当你使用DeliveryRequirementsAttribute 特性的时候,会出现一些很奇怪的现象。经过我个人的分析,这是WCF的一个Bug。
我随便定义了一个简单的服务:OrderService。并在服务契约上应用了一个DeliveryRequirementsAttribute 特性,将RequireOrderedDelivery和QueuedDeliveryRequirements分别设置成TRUE和QueuedDeliveryRequirementsMode.Allowed,也就是允许终结点的绑定采用队列传递,但是要求绑定采用有序消息交付。
1: [Serializable]
class Order
3: { }
4: [ServiceContract]
true, QueuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed )]
interface IOrderService
7: {
8: [OperationContract]
void ProcessOrder(Order order);
10: }
class OrderService : IOrderService
12: {
void ProcessOrder(Order order)
14: {
new NotImplementedException();
16: }
17: }