0

HTTPChannel を介した .Net Remoting を使用してサーバー アプリから取得したかなり複雑な計算データを表示する WinForms クライアント アプリを想像してみてください。
クライアント アプリは 1 日中実行されている可能性があるため、ユーザーが必要なときにデータの再読み込みを開始できるように、新しいデータが利用可能であることをクライアントに通知する方法が必要です。
現在、リモート .Net イベントを使用して、イベントをクライアントにシリアル化し、クライアント側でイベントを再スローしています。

私はこの設定にあまり満足しておらず、再実装する予定です。
私にとって重要なのは:

  • .Net 2.0 ベースのテクノロジー
  • 使いやすい
  • 低複雑性
  • サーバーまたはクライアントの再起動後も機能するのに十分な堅牢性

.Net 2.0 に制限されている場合、そのような機能をどのように実装しますか? どのテクノロジー/ライブラリを使用しますか?
問題に取り組む方法についてのインスピレーションを探しています。

編集:

クライアントとサーバーは同じ組織内に存在し、通常は LAN、おそらく WAN/VPN の状況です。
このメカニズムは、利用可能な新しいデータがあることをクライアントに認識させるだけです。クライアントに実際のデータを取得するためにリモート処理を続けたいと思います。これはかなりうまく機能しているためです。MSMQ には Windows が付属していますね。したがって、それを使用しても問題ないはずですが、私はあらゆる代替手段を受け入れます。

4

4 に答える 4

1

MSMQ を使用して同様の通知メカニズムを実装しました。クライアント マシンは、ローカルのパブリック キューを開き、そのキュー名をサーバーに通知します。変更が発生すると、サーバーは、認識されているすべてのクライアント キューに通知をプッシュします。このようにして、通知が送信されたときにデータが実行されていなかったとしても、クライアントはデータの準備ができていることを知ることができます。

唯一の欠点は、クライアントで MSMQ が必要になることです。そのため、クライアントのマシンをそのように制御できない場合、これは機能しない可能性があります。

余分なレベルの冗長性 (たとえば、クライアント マシンが完全にダウンしているため、クライアント キューが使用できない場合) のために、クライアントに配布する前に、サーバーで通知をキューに入れることができます。サーバー キュー内の通知は、クライアントへの接続が成功した場合 (または、試行が 3 回失敗した後など) にのみ削除されます。

また、サーバーが測定された回数、測定された期間にわたってクライアントにメッセージを配信できなかった場合、サポート エンティティに通知され、エラー アラートが送信され、クライアント キューが送信先のリストから削除されます。 . 「測定された」と言うときは、設定に意味のある周波数/期間を意味します。私の場合、5 分間隔で 5 回の再試行でした。

また、クライアントに定期的に通知サブスクリプションを「更新」させることも理にかなっています。更新が行われない場合、最終的にクライアント キューは、サービスの "グルーマー" プロセスによって宛先リストから削除されます。

于 2008-10-14T14:23:49.440 に答える
0

組み込みのものが見つからず、すべてのクライアントのアドレスがわかっていると仮定すると、データが変更されたときにクライアントにUDPメッセージを送信できます。UdpClientを使用すると、これは非常に簡単です。クライアントアプリが特定のポート上のUDPデータがサーバーから新しいデータを取得する必要があることを意味すると想定できる場合、データグラムにデータを含める必要はありません。

必要に応じて、サーバーがあまりにも「おしゃべり」でない限り、これをブロードキャストパケットにすることもできます(クライアントが誰であるかわからず、クライアントがサーバーと同じサブネット上にある場合)。

どのような解決策を決定する場合でも、クライアントに投票させないようにすることをお勧めします。これにより、多くの不必要なネットワークトラフィックが作成されますが、それでもそれほどうまく機能しません。

于 2008-10-14T21:31:52.587 に答える
0

メッセージ キュー ベースのソリューションを実装する必要があるように思えます。実装が容易で、再起動後も存続でき、テクノロジーはサーバー (MSMQ、MGQSeries) とクライアント (System.Messaging) の両方で成熟しています。

于 2008-10-14T14:21:42.813 に答える
-1

私は通常、クライアントで UI タイマーを使用して定期的にサーバーにアクセスし、新しいデータまたは更新されたデータがあるかどうかを確認します。(新しい行のタイムスタンプ、ファイルのタイムスタンプ、最後に計算された日付を含むテーブルなどの新しいデータがあることを識別するメカニズムがあると仮定します)

そうすれば、サーバーはクライアントについて知る必要がありません。クライアントは、暇なときにチェックすることができます。

于 2008-10-14T14:26:17.220 に答える