1

ユーザーがユーザー名とパスワードを指定する必要がある「ログイン」ウィンドウを備えたWPFアプリケーションがあります。次に、WPF アプリケーションは、これらの資格情報を使用して WCF サービスに接続し、その有効期間中はサービスへの接続を維持する必要があります。これは、ICallback インターフェイスを介してサービスからコールバック通知を受信するためです。

これがアイデアです(大きな画像へのリンク):

これがアイデアです:

質問:

  1. 資格情報 (ユーザー名とパスワード) 情報は、Login ViewModel を介して静的サービス ファクトリにフィードする必要がありますか?

  2. サービス クライアントが WCF サービスへの接続に成功すると、ログイン ウィンドウが閉じ、MainWindow が表示されます。メイン ウィンドウは、ログイン ウィンドウが作成したサービス クライアントをどのように認識しますか? サービスから到着したら、MainWindow はどのように通知を表示できますか?

  3. ログイン ウィンドウは、サービス クライアントを MainWindow に渡す必要がありますか? これは私には悪いコーディングのようです...

  4. WCF サービスが何らかの理由でダウンしたとします。MainWindow がそれを表示できるようにしたいと思います (おそらく赤い LED 画像を使用します)。切断に関する情報は、サービス ファクトリからメイン ウィンドウのビューにどのように渡されますか? ビューはクライアントのイベントにフックする必要がありますか?

  5. WCF サービスが切断された場合 (メンテナンスのためにダウンした可能性があります)、WCF サービスへの「自動再接続」を実行するにはどうすればよいですか?

質問に答えてくれる人なら誰でも助かります...

4

2 に答える 2

1

「ハートビート」である新しい WCF API 呼び出しを作成します。この呼び出しは、約 5 分ごとにクライアントによって呼び出される必要があります。そうでない場合、クライアントは切断されています。

クライアントに強制的に切断メッセージを送信させるのは問題があります。クライアント マシンは、接続の切断やその他の障害などのハードウェアの問題により、いつでもクラッシュする可能性があることに注意してください。

于 2012-07-10T23:22:51.747 に答える
1
  1. Login サービスを ILoginService インターフェースに抽象化します (モック化が容易になります)。最適と思われる方法で展開コードを実装します (サービス ファクトリなど)。LoginService は、ログイン機能 (認証など) を実装します。

  2. どの MVVM ツールキットを使用していますか? (MVVM Light を試すことをお勧めします。)

  3. はい。ログインは単なる子ポップアップ/ダイアログです。共有 LoginService で MEFing を試すか、MVVM Light を想定して、Messenger を使用できます。

  4. マイキーが提案したように、MainViewModel がハートビートを実行する必要があります。エラーが発生した場合は、INotifyPropertyChanged (INPC) プロパティ (MainWindow のバインド先) を設定します。

  5. これは個人的な好みのようです。5 秒後、30 秒後、2 分後、5 分後、1 時間後に再接続を試行する必要がありますか? 知らない; あなたが感じるようにそれをしてください。いろいろ試してみてください。再接続に同じスレッドを使用しても害はないと思います。

于 2012-07-11T04:57:07.520 に答える