約1,000人の従業員PCにインストールされるWindowsフォームアプリケーションを開発しています。ユーザーは、アプリケーションの複数のインスタンスを同時に実行できます。クライアントはすべて1つのイントラネット上にあります。WindowsフォームとWCF - クライアントアプリケーション通信
アプリケーションが変更されると、データベースレコードの変更が発生する可能性があります。その変更は他のクライアントに伝達され、UIが更新されます。
1.マルチキャストパケット
ソースクライアントがレコードを変更して、何かが変更されたペイロードにマルチキャストパケットを送信:
私たちのチームは、およそ2つの異なるアプローチを話しました。他のクライアントはこれを受け取り、指定されたデータをフェッチします。パケットが受信されなかった場合を考慮し、積極的にデータを取得する必要があります。
この時点で私の質問は、クライアントがパケットを受信しなかったことをどのようにして知っていますか? (あなたが知らないものは分かりません)データベースにタイムスタンプを含む何らかのイベントログを表示し、UIコントロールは更新された最後の時刻を追跡します。彼らは集中し、タイムスタンプをチェックし、必要に応じて更新します。
他の人は、UI要素がフォーカスに入るたびにリロードすると述べています(Outlookのモードを考え、CABを使用してスタックワークスペースの前面にコントロールを配置する)。マルチキャストは、現在のコンテキストが変更されたクライアントを更新することです。彼らがそれを見逃した場合、彼らはモードを変更して戻ってくるまで古いデータで動作します。
2. WCFとコールバック
クライアントバインディングTCP上のコールバックのWCF契約に登録します。これに関する主な技術的懸案事項は、サーバーが多くのオープンソケットを維持していることです。私たちは、それが伝統的な意味でどのように開いていないのかを読んで、最大90秒間眠ってから、その時点で再確立します。また、Windows 2003 Serverマシンが処理できるオープンな接続の最大数、およびレジストリでその接続を変更する方法についても説明しました。
サーバに1,000個のオープンソケット接続がある場合、これは崩壊するでしょうか?
誰もがこの同じ状況に直面し、WCFのアプローチを試したり評価したりした場合、私たちはそれについて聞きたいと思うでしょう。
バッチ更新など、私が議論して考えている多くのことに触れています。私は環境について完全には説明していないが、地理的に隣接した建物では、同じ物理LAN上に約1,000人のユーザーがいることを強調しています。データは複数の垂直領域にまたがっているわけではなく、すべてのユーザーが同じデータを見ているだけで、一部はアイテムを編集している可能性があります。私はあなたの答えが役に立ったと思うので+1しますが、誰かがこれを試してみて、パフォーマンスやリソースの問題を知っているかどうかを見ていきます。ありがとうございました。 – blu
実際、私はこれの結果を学ぶことに興味があります。少なくともあなたがするかもしれない概念の証明。あなたがブログを書くのは素晴らしいことです(ヒント、ヒント)。 –