2012-12-13 53 views
4

我有幾個WCF服務合同,所有這些都包含完全相同的方法StopOperation,具有相同的特徵:FaultContract繼承

[ServiceContract] 
public interface IMyServiceA 
{ 
    [FaultContract(typeof(ServiceAError))] 
    [OperationContract] 
    void StopOperation(TaskInformation taskInfo); 

    // other specific methods 
} 

我想什麼,能夠做的是提取StopOperation成接口,IStoppable,並讓我的所有服務都繼承這個操作。但是,我在定義FaultContract時遇到了問題,因爲它定義了具體的故障類型。

是否有可能有FaultContract指抽象ErrorBase類型,並請有KnownContract莫名其妙指定具體的嗎?有點像:

[ServiceContract] 
public interface IStoppable 
{ 
    [FaultContract(typeof(ErrorBase))] 
    [OperationContract] 
    void StopOperation(TaskInformation taskInfo); 
} 

不管我在哪裏試過指定KnownContract,它似乎並沒有採取。

回答

2

您是否嘗試過使用泛型類型?

例如:

[ServiceContract] 
public interface IStoppable<T> where T : ErrorBase 
{ 
    [FaultContract(typeof(T))] 
    [OperationContract] 
    void StopOperation(TaskInformation taskInfo); 
} 

然後你會說

[ServiceContract] 
public interface IMyServiceA : IStoppable<ServiceAError> 
{ 
    // other specific methods 
} 

沒有測試過這一點,但我看不出有任何理由,這不應該工作。

+0

是的,這看起來像一個合理的解決方案!我會讓你知道它是怎麼回事! –

+0

由於沒有人回答,我會接受你的。我最終沒有使用這種解決方案,因爲我不想將錯誤類型指定爲通用參數......我最終使用了[適配器模式](http://www.dofactory.com/Patterns/PatternAdapter .aspx)將不同的服務實現封裝在通用接口後面。 –