当前位置:编程学习 > C#/ASP.NET >>

为什么WCF设计上,要有BehaviorAttribute, 而不是直接把所有设置都放到ContractAttribute里呢?

--------------------编程问答-------------------- 因为它实际上很复杂,而且是嵌套或者引用其它定义的多层次的。它相当于一个小型(文本文件)数据库,并不简单。 --------------------编程问答--------------------
引用 1 楼 sp1234 的回复:
因为它实际上很复杂,而且是嵌套或者引用其它定义的多层次的。它相当于一个小型(文本文件)数据库,并不简单。


不太明白,Attribute 跟 数据库 的关系??

但有一点明白了,ContractAttribute 同 BehaviorAttribute 的区别在于,ContractAttribute 影响 WSDL, 就是说 ContractAttribute 是用来告诉Client, 这个服务有什么功能。

而 BehaviorAttribute 只影响Service端,是用来告诉WCF,怎么做这个服务。


现在,就剩下 为啥 System.ServiceModel 里还要有 MethodAttribute,例如TransactionFlowAttribute ?  这些 MethodAttribute 为什么不作为 OperationBehaviorAttribute 的 property呢? 而非得独立的弄出一个Attribute?


--------------------编程问答-------------------- 看了看 ServiceModel  的源码,大概明白了。

1. ContractAttribute 同 BehaivorAttribute 必须是两种,ContractAttribute 影响 WSDL, 就是说 ContractAttribute 是用来告诉Client, 这个服务有什么功能。
而 BehaviorAttribute 只影响Service端,是用来告诉WCF,怎么做这个服务。

2. 为什么有  MethodAttribute, 而不是把所有设置都放到BehaviorAttribute里?
看下源码就明白了。 OperationBehaviorAttribute  同 TransactionFlowAttribute  有一模一样的继承关系。包括 Usage 也一样。

  [AttributeUsage(AttributeTargets.Method)]
  public sealed class OperationBehaviorAttribute : Attribute, IOperationBehavior
  

  [AttributeUsage(AttributeTargets.Method)]
  public sealed class TransactionFlowAttribute : Attribute, IOperationBehavior
  

所以本质上 OperationBehaviorAttribute  同 TransactionFlowAttribute  是一种Attribute。OperationBehaviorAttribute  里 有5个public property,前3个都是简单类型,最后2个是enum。
    public bool TransactionAutoComplete
    public bool TransactionScopeRequired
    public bool AutoDisposeParameters
    public ImpersonationOption Impersonation
    public ReleaseInstanceMode ReleaseInstanceMode

而 TransactionFlowAttribute是一个比较复杂的Class,自己就包含一堆东西。所以似乎独立出来比较好。

同样的现象还出现在 ServiceBehaviorAttribute 上,它有22个public property, 都是简单类型,或者enum,或者object。而System.ServiceModel  里也有一堆继承自 Attribute, IServiceBehavior 的 Attribute,也没有都放到ServiceBehaviorAttribute里。




补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,