2011-06-24 11 views
2

私は、指定されたオブジェクトのプロパティ(例えば「要求」など)に従って異なる外部Webサービスを呼び出すWebサービスを設計しています。これらのWebサービスへの参照は、Visual Studio 2008の「Web参照の追加」メニューから追加されます。これは、承知しているように、System.ServiceModel.ChannelBase<ISomeInterface>から継承する各エンドポイントのプロキシクラスを作成します(ISomeInterfaceは特定のサービスのWSDL )。静的クラスでのWCFプロキシのカプセル化

質問は、たとえば、すべてのプロキシの内部リストを含む単一のServiceManager(たとえば)静的クラスにこれらのすべてのプロキシをカプセル化したいと思います。そのため、一方では所定のサービスは、メインアプリケーションの周囲に散在する代わりにServiceManagerを通過することができ、一方、新たなプロキシクラスへの参照を単純に追加することによって、後に追加され得る新しいサービスをServiceManagerに知らせることができる。

私は

public static class ServiceManager 
{ 
    #region Properties 

    public static Dictionary<string, TProxy> ServiceList { get; private set; } 

    #endregion 
} 

ようServiceManagerをdesingingについて考えたが、私は別のプロキシのすべてがServiceManager.ServiceList["ServiceName"]を使用して呼び出すことができるように、私はによってTProxyを交換する必要があるかわかりません。誰もがこれで私を助けることができますか?

答えて

3

サービスごとに異なるインターフェイスが実装されているため、オブジェクトにする必要があります。共通のベースインターフェイスを作成できない場合は、そのインターフェイスからプロキシを継承し、List <MyBaseInterface>を作成します。

プロキシごとにクラスに1つのプロパティを設定できないのはなぜですか?少なくともあなたは厳密に型付けされた方法でプロキシにアクセスできます。

+0

'ClientBase'は、プロキシのために良いベースのインタフェースである' ICommunicationObject'を実装します。しかし、プロキシはシングルトンではなく、過渡的なオブジェクトです。 – Randolpho

+1

確かに。 ServiceManagerをシングルトンにすることができます。プロキシがFaulted状態になったら、それを再インスタンス化する必要があることを理解してください。 –

+0

かなり。また、 'IDisposable'も実装していますが、実際には' using'ステートメントを使用するべきではありません。想像してみてください...ディスソップ可能なシングルトン。 – Randolpho

2

プロキシを再使用しないでください。それらを再度インスタンス化します。プロキシを区別するマジックストリングも同様に悪いです。

静的ファクトリを使用する方が、サービスプロキシを返すほうが、インスタンスを1つだけ保持する方がよい場合があります。このような

何か:

public static class ServiceFactory 
{ 
    public static Proxy CreateProxy(); 
    public static Proxy2 CreateProxy2(); 
    // etc. 
} 
関連する問題