2011-10-21 15 views
1

ちょうど...いくつかのプラチナをしています。WCFを使用して異なるオブジェクトを掲示/通知しますか?

構造:

AクライアントWPFアプリケーションとサーバーWPFアプリケーション、それらの両方のセルフWCFサービスをホストします。

  1. サーバーWPFは、クライアントのWCFへのチャネルを作成し、常にメッセージを送信します:

    クライアントWPFは、私が何をしたいのListBox

    が含まれているビューが含まれています。

  2. クライアントのWCFは、それを購読しているどのクラスにもメッセージと掲示板を受け取ります。 (あるいは、私はそれを観察するクラスを言うでしょう)。

  3. この場合、クライアントのビューはメッセージを受け取り、リストボックスに入れます。

問題:

だから、問題は、私が見るにはWCFを観察してみましょうはどうすればよいのですか?または、WCFから通知を受け取りますか?

クライアントのWCFは、ServiceHost myHost = new ServiceHost(typeof(MyClient))を使用して作成されます。

WCFにクライアントのビューへの参照があり、通知を行う方法を教えてください。

Throught:

  1. はどういうわけか、内部ビューの参照(この...意味がありません)

  2. Observerパターンを持っているクライアントのWCFをハードコーディング? staticのSubjectクラスを作成して、クライアントのWCFインターフェイスを実装します。 クライアントのルーターでは、すべてのメソッドがSubjectクラスを呼び出します。ビューは、クライアントのWCFインタフェースも実装し、Subjectクラスに接続します。など、どこでも、すべての呼び出しかもしれないオプション2と同様3.Everythingが、代わりにルータの

    public class ClientServiceObserver : IClient 
    { 
        static List<IClient> _observers = new List<IClient>(); 
    
        public static void Attach(IClient client) 
        { 
         _observers.Add(client); 
        } 
    
        public static void Detach(IClient client) 
        { 
         _observers.Remove(client); 
        } 
    
        public void SendCallbackMessage(string message) 
        { 
         foreach (IClient client in _observers) 
         { 
          client.SendCallbackMessage(message); 
         } 
        } 
    } 
    

    :最後に件名クラスするルータは、このような何か

....すべてのビューの呼び出しよくWCFにサブジェクトクラスに通知があっただけで更新があれば、Viewは通知を受け取ってサーバーへのチャネルを作成して自分自身のデータを取得します.....

上記のオプションは本当に良いとは言えません。 2それがもうObserver Patternsなのかどうかはわかりません....

私はそれを行うための最良の方法は何でしょうか?

答えて

0

あなたが試していることを達成するためにEventAggregatorパターンを見てください。EvenAggregator実装

  1. MVVM Light
  2. Microsoft PRISM
  3. Caliburn.Micro

に用意されていますが、ここで述べた完全なフレームワークを使用する必要はありませんEventAggregator here
を使用するため、あなたが引き出すことができます例を参照してください。 EventAggregatorクラスを作成して使用します。

+0

ありがとう、私はそれらのフレームワークを学ぶための時間だと思います:) –

+0

フレームワークの理解は必要ありません。 EventAggregatorコンポーネントの使い方を見てください – Chandermani

関連する問題