2012-05-13 5 views
0

WCFサービス用に[ServiceContract]とマークされたインターフェイスがあります。 しかし、私のコードでは2つの異なるWCF以外の場所でも使用されています。ServiceContractインターフェイスの追加

問題は、WCFプロジェクトではなく[ServiceContract]とマークされているインターフェイスを使用していることです。

コードを複製せずにWCFコンテキストでのみこの属性を使用する方法はありますか?

答えて

0

WCF以外の場所でWCFコントラクト定義を使用しているのはなぜですか?そのインターフェイスがWCF実装の詳細であるという事実です。他のコードでWCFに関連しないインターフェイスを定義し、WCFと通信する必要がある場合は、WCFインターフェイスに転送するアダプタを記述します。

本の追加の利点は、あなたがその中に絶縁境界を与えることがあるが、WCFの契約に変更し、あなたの他のコード

interface IFoo 
{ 
    void DoSomething(); 
} 

[ServiceContract] 
interface IWCFFoo 
{ 
    [OperationContract] 
    void DoSomething(); 
} 

class FooAdapter : IFoo 
{ 
    IWCFFoo wrapped; 

    public FooAdapter(IWCFFoo wrapped) 
    { 
      this.wrapped = wrapped; 
    } 

    public void DoSomething() 
    { 
      wrapped.DoSomething(); 
    } 
} 

に出血する必要はありません。また、それはさまざまな種類がIFoo上で使用することができますし、 IWCFFooので、DataContract DTOがコードの残りの部分に流出しないようにしてください

+0

属性を追加できるこのようなアダプタを追加する方法の例を教えてください。 –

+0

詳細を追加 –

0

あなたは、条件付きコンパイルディレクティブを使用することができます。

#if WCF 
[ServiceContract] 
#endif 
public interface ... 

次に、あなたのWCFプロジェクトでWCFトークンを定義します。

関連する問題