私は現在、WCFおよびWCF Data Services経由でインターネット経由でデータベースと通信するc#.NETデスクトップアプリケーションを開発中です。アプリケーションには、ある間隔でリフレッシュする必要のある箇所が多数存在します。最も簡単な解決策は、これらの領域をタイマーに置き、データベースを再クエリーすることです。しかし、何千ものクライアントがサービス層に接続してデータベースを使用するため、これらの操作はサーバーにとって非常に高価になります。頻繁なデータベースポーリングを管理するための良いC#.NETソリューション
私が検討したのは、クライアントによってポーリングされたRSSフィードを作成し、この特定の領域をいつ更新する必要があるかをクライアントに知らせることです。 RSSフィードは、データベースをポーリングして変更を行うサービスによって管理されるか、またはクライアントによって行われたWCF要求によってキューに入れられたアイテムのリストを通じて反復されます。
また、クライアントからサーバーへの直接的かつ連続的な接続を作成することも考えましたが、どのようなアウトバウンドファイアウォールポートがクライアントから開かれるのかよくわかりません。おそらくポート80/443にしかカウントできません。
私の質問は、この問題を解決するために人々が成功したソリューションは何ですか?人々はRSSをやりましたか? Microsoft Syncサービス?クライアントとサーバー間の双方向通信は、WCF経由でいくつかの保存ポートを介してですか?
アイデアをいただければ幸いです。
+1ですが、長いポーリングを使用する数千のクライアントが心配です。いくつかの環境最適化は、おそらく開いている接続に必要です。私はWCFでこれをやったことがないので、難しさ/ポジティブについてはコメントできません。 – marr75
+1 WCFを使用しているC#の長いポーリング実装について知っていますか?私はそれをgoogledし、良い例を思い付いていない。 – BernicusMaximus
申し訳ありませんが、私はしません。私はSilverlightのWCFにDuplexチャンネルがあることを知っていますが、私が読んだところでは定期的にポーリングし、長いポーリングはしません(http://msdn.microsoft.com/en-us/library/cc645028(VS.95) .aspx) –