2012-01-03 83 views
3

當前對於所有的wcf操作,我必須將OperationBehavior屬性(用於模擬)放在每個方法的頂部。wcf服務(類)級別OperationBehavior

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)] 

把它用於每種方法似乎是浪費時間。我需要的是消除將行爲應用於所有可用操作的必要性。有沒有辦法把這個屬性類的級別,以便它影響該服務類中的所有方法?

回答

4

創建自己的屬性,實現IServiceBehavior和應用正確的操作行爲,所有操作:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] 
public class AllowImpersonationAttribtute : Attribute, IServiceBehaviour 
{ 
    void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription desc, ServiceHostBase host) 
    { 
    var operations = desc.Endpoints.SelectMany(e => e.Contract.Operations); 
    foreach (var operation in operations) 
    { 
     operation.Behaviors.Add(new OperationBehaviorAttribute{Impersonation = ImpersonationOption.Allowed}); 
    } 
    } 
    ... // remaining methods empty 
} 
+0

喜豐富,我不需要實現任何屬性。我需要的是消除將行爲應用於所有可用操作的必要性。 – rovsen 2012-01-03 15:22:28

+0

@archstanton查看預期用法的更新。只需將上述屬性添加到您的服務中,所有操作都將獲得允許模擬行爲。 – 2012-01-03 15:49:01

+0

不幸的是它沒有幫助。它說「服務操作'someMethod'屬於與'ISomeService'名稱和'http://tempuri.org/'命名空間的合同不允許模仿」 – rovsen 2012-01-04 11:34:20