1

PRISM を使用して MVVM アーキテクチャに WPF クライアント アプリケーションを実装しています (PRISM は初めてです)。

WPF アプリケーションには 3 つの主要な領域があります。

  • 左地域
  • 右側の領域
  • サイドリージョン

左側の領域には「フェッチ ボタン」のあるビューがあり、これを押すと、「FETCH」WCF サービスに接続し、アイテムをフェッチし、サービスから切断してビューにアイテムを表示します。

右側の領域には、ボタンのないビューがあります。このビューは、10 分ごとに「POLL」WCF サービスに接続し、アイテムを取得し、サービスから切断して、ビューにアイテムを表示する必要があります。

サイド リージョンには、ボタンのないビューがあります。このビューは 'NOTIFICATIONS' WCF サービスに接続し、アプリケーションのライフ サイクル全体で接続を維持する必要があります。サービスからコールバックを受け取り、Side ビューに表示する必要があります。

これがどのように見えるかを示す画像です:

画像

質問:

  1. 「Fetch View」を含む「FETCH MODULE」のコンストラクターには何を渡す必要がありますか? それはサービス自体である必要がありますか、それともチャネルファクトリーである必要がありますか? ユーザーが「フェッチ」ボタンを押すたびに「フェッチWCFサービス」への接続を開始する必要があるため、これはある種のチャネルファクトリである必要があると思います。

  2. 同じ質問が「POLL MODULE」にも当てはまります。

  3. 「通知モジュール」について - 「通知サービス クライアント」のシングルトン インスタンスを渡す必要がありますか? (アプリケーションはサービスに対してクライアントを 1 つだけ開く必要があり、常に接続されている必要があるため)

  4. タイムアウトによる「通知」ク​​ライアントの障害を回避するために、「通知」WCF サービスでスタブ メソッドを呼び出すある種の「ハートビート」を実装して、タイムアウトしないようにする必要があります。ハートビートのコードはどこに配置すればよいですか? それは「通知モジュール」にあるべきですか?誰がそれを開始する必要がありますか?(ある種のバックグラウンドスレッドで実行する必要があると思います)

  5. 私は現在 MEF を使用しており、自分が何をしているのかよくわかりません (ビューを [Export] で装飾し、[ViewModel] セッターを [Import] などで装飾しましたが、誰が取得するかを制御する方法がまだわかりませんロードされたとき)。さらに、依存性注入が MEF でどのように機能するのかわかりません。「MEF Bootstrapper」と「Unity Bootstrapper」の使用の違いは何ですか?

  6. MEF を使用して [Import] および [Export] 属性のみを使用する人もいれば、「IModule」からモジュールを継承し、EventAggregator、Container、および RegionManager で「InitializeModule」を実装する人もいます。これらのアプローチの違いは何ですか? また、それぞれのアプローチをいつ使用する必要がありますか?

  7. 「サービス参照の追加...」を使用することをお勧めしますか、または「IChannelFactory」を手動で作成することをお勧めしますか? (長所短所)

  8. サービス クライアントはモジュールの一部にする必要がありますか、それともインフラストラクチャの一部にする必要がありますか?

  9. WPF+PRISM+WCF のサンプルをインターネットでたくさん検索しましたが、使用できる適切なサンプルが見つからなかったため、ビューモデルにサービスを挿入する方法を理解できました。誰でも例\サンプルリンクを提供できますか?

次の 4 つの質問は難しい問題です。

  1. 私が言及した 3 つの WCF サービスはすべて、同じ「ユーザー名 + パスワード」認証方法を使用します。つまり、アプリケーションのロード時に「ログイン」ウィンドウをポップアップする必要があります。PRISM と MVVM でそのようなことを行うためのベストプラクティスは何ですか? 「ログイン」ウィンドウを「シェル」ウィンドウに置き換える必要がありますか? (私はそうは思わないので、どうすればいいですか?)

  2. ユーザーがユーザー名とパスワードを入力すると、最初のサービスだけに接続しようとする必要があります。成功した場合は、接続を切断して「ログイン」ビューを閉じます (つまり、他のサービスで接続が成功すると仮定します)。 .

  3. ユーザーが入力したユーザー名とパスワードをどこに保存すれば、毎回ユーザーに資格情報の提供を要求せずにアプリケーションがサービスへの再接続を続けることができますか?

  4. 何らかの理由で、モジュールの 1 つが WCF サービスの 1 つに接続しようとして、資格情報のために成功しない場合、私が取るべきアプローチは何だとアドバイスしますか? 他のすべてのモジュールを強制的にサービスから切断するイベントを発生させてから、「ログイン」ビューをポップアップする必要がありますか?

長文すみません…

4

0 に答える 0