2009-04-20 7 views
4

私は単純なアカウンティングプログラムを作成していますが、いくつかのC#winformクライアントとデータベースにデータを読み書きするjavaサーバーアプリケーションで構成されています。要件の1つは、すべてのC#クライアントがサーバーから更新を受け取る必要があることです。たとえば、ユーザーが自分のC#クライアントから新しい請求書を作成する場合、他のユーザーはクライアントからこの新しい請求書を参照する必要があります。サーバーがリッチクライアントにデータをプッシュする方法

私の経験は主にWeb開発にあり、C#のクライアントとJavaサーブレットサーバーでこの要件を満たすための最良の方法がわかりません。

私の初期はGlassfishでActiveMQを実行し、メッセージングのpub/subメソッドを使用して更新をC#クライアントにプッシュすることです。メッセージタイプを区別するために、newInvoice、cancelInvoiceなどの異なるトピックを作成します。各メッセージにはJSONでエンコードされたオブジェクトが含まれています。

しかし、これにはかなりの労力がかかるようです。ユーザーベースが非常に小さい(3人または4人の同時ユーザー)ことを考えれば、もっと簡単な解決策があるはずです。 (私はソケットプログラミングに慣れていません:))

これはクライアントサーバープログラミングの101の質問ですが、経験豊富なプログラマーが私にいくつかの簡単な解決策を教えることができれば素晴らしいと思います。

答えて

5

最も簡単なアプローチは、単にポーリングを使用するだけです。つまり、クライアントが(各時間間隔ごとに)データをクライアントに照会させることです。これにより、ファイアウォール、セキュリティ、視線、解決、クライアントトラッキングなど、あらゆる問題が回避されます。

WCFを使用すると、デュプレックスチャネルでコールバックを行うことができます(サーバーがクライアントにメッセージを積極的に送信できるようにする)が、これはより複雑です。私はシンプルさを大事にしています。

ここで役立つのは、おそらくデータベーストリガーによって供給される監査テーブルなど、「xからの変更」を照会するための組み込みのメカニズムを持つシステムを設計する手助けです。正確な詳細はプロジェクトごとに異なります。

もう1つのオプションは、ADO.NET Sync Servicesです。これは、サーバーのデータベースのローカルコピーを最新の状態に保つために、あなたが求めていることの多くを行いますが、独自の複雑さがいくつかあります。これは、「ローカルデータベースキャッシュ」VSテンプレートのIIRCで利用できます。

0

サーバーから1:Nクライアントに情報をプッシュするのではなく、クライアントが頻繁に更新プログラムをポーリングするのは簡単ではないでしょうか?クライアントが起動してサーバーとの接続を確立すると、サーバーはそのクライアント接続用の新しいメッセージキューを動的に生成し、クライアントは更新をポーリングできますか?

0

ActiveMQ(前述のとおり)やXMPPなど、いくつかのプッシュ技術があります。しかし、あなた自身が懸念するクライアントが3人か4人しかいない場合、ポーリングは最も簡単な解決策になります。あなたのサーバーが8086か何かでない限り、あなたのケースではそれほど大きな問題ではありません。

0

よくある質問はStreamHub Push ServerですC#でサーバーから更新を受信するための.NET Client SDKを持つJavaで実装されています。また、Java Client SDKと通常のAjax/Comet Webブラウザをサポートしており、Web、JavaおよびC#クライアントにデータをプッシュする柔軟性を提供します。

関連する問題