Webクライアント(ASP.NET MVC)でリアルタイム更新が必要な要件があります。私がそれを回すことができる唯一の方法は、COMETテクニック(ServerPush/Reverse-AJAX)テクニックを実装することです。WCF Comet実装
シナリオは次のとおりです。 ユーザーA別のWebサイトクライアントにメッセージを保存します。その後、ユーザBは、ユーザ "A"によって異なるブラウザで自動的に更新されます。
は、私が実際にこのアーキテクチャにより、溶液仕上げ: ASP.NET MVCを - WCF上(ロングプール)jqueryのアヤックス(ポスト)要求をしました。 WCF - 1秒間隔でデータベース(SQL Server)でポーリングを行います。新しいデータがデータベースに追加された場合、ポーリングはデータがクライアントに返されて中断されます。
WCF COMET方法擬似コード:
private Message[] GetMessages(System.Guid userID)
{
var messages = new List<Message>();
var found = false;
/* declare connection, command */
while (!found)
{
try
{
/* open connection - connection.Open(); */
/* do some database access here */
/* close connection - connection.Close(); */
/* if returned record > 0 then process the Message and save to messages variable */
/* sleep thread : System.Threading.Thread.Sleep(1000); */
found = true;
}
finally
{
/* for sure, incase of exception */
/* close connection - connection.Close(); */
}
}
return messages.ToArray();
}
私の関心や疑問がある:は、(1秒間隔で)WCFにポーリング技法を行うための最善のアプローチですか?
原因:データベース接続プーリングの使用を最大限に高めました。そのテクニックに問題はないと私は期待しています。
注:これは、下記のWCF属性を使用したマルチスレッド実装です。
ところで、自分でホストされているWCFサービスやIISでホストされているサービスはありますか?後で問題が発生した場合、IISはパブ/サブシナリオでは機能しないリクエストをキューに入れると、同時スレッドレベルが15以下と非常に低くなります。 – Anders
はい、私は自己ホストWCFサービスです(IISがホストしています)。 SQL Server 2008でService Brokerサービスを有効にしてSqlDependecyオブジェクトを使用しようとしましたが、正常に動作し、データ変更がクライアントに返されます。しかし、DBAは、スレッドとオープン・サービス・リスナー(最大限は定義されていない)に制限があるため、使用しないように指示しました。適切なCOMETサービスをどのように実装すればよいか分かっていますか? – Mike
WCF COMET実装の正確な方法を教えてもらえますか?ありがとう! – Mike