トップ回答者
SilverlightでDB変更通知の受け取り

質問
-
Silverlightの表示中に、データベースに変更があったら、
Silverlight(XAP)でDBからデータを取得する・・といった事が実現出来ないか考えております。調べたところ、Silverlightから直接データベースにアクセスすることはできないようなので、
データの取得にはWebサービスかWCFサービスを利用しようと考えています。Silverlightでタイマー処理を行い、定期的に(Webサービスを呼んで)データを取得する、といった事は出来ると思うのですが、
定期的ではなくデータベースに変更があった場合にデータを取得しに行く・・という事が実現できればと考えています。ASP.NETのクエリ通知のように、データベースに変更があったという情報をSilverlightで受け取る事は出来るのでしょうか?
開発環境はVisual Studio 2008、Silverlight3 で、WebサーバーはIIS 6.0 か 7.0 です。
何か良い情報をお持ちの方がおりましたら、ご教授お願い致します。
Silverlight初心者のため、質問内容に見当違いの所などありましたら、合わせて教えて頂けると幸いです・・。
2010年6月2日 11:08
回答
-
>ASP.NETのクエリ通知のように
↑って、Web アプリケーションのクライアント側まで直接的に通知が到達するんでしたっけ?
DBMS から Web アプリケーションに対して通知が行われて、それをトリガに Web アプリケーションがキャッシュをクリア、後はクライアントとWebアプリケーションの実装(事実上、AJAX などによるポーリング)でなんとかしてくれ、的なものなのかなーと思っていましたが…
ごく一般的な構成を採用する場合、インターネット上に配置されたサーバとクライアントとの間で HTTP 接続を使用してやりとりする以上、サーバからクライアントに対して接続を行うことはできません。
なので、表面的にはいかにもサーバ主導でクライアントに対して通知が送られてきているように見えても、最下層ではクライアントからポーリング的な操作が行われているはずです。
# 若干の例外もあるにはありますが、ごく一般的な Web システム前提ということで… (どーせその例外を IIS はサポートしてませんし)
2010年6月2日 11:52 -
話が少し戻りますが、SilverlightではPollingDuplexHttpBindingが使用できるようなので、これも検討する余地はありそうです。
情報源はこちら。
http://www.microsoft.com/japan/powerpro/TF/column/st3_01_3.mspx
http://msdn.microsoft.com/ja-jp/library/dd470106(VS.95).aspx
2010年6月8日 15:43
すべての返信
-
>ASP.NETのクエリ通知のように
↑って、Web アプリケーションのクライアント側まで直接的に通知が到達するんでしたっけ?
DBMS から Web アプリケーションに対して通知が行われて、それをトリガに Web アプリケーションがキャッシュをクリア、後はクライアントとWebアプリケーションの実装(事実上、AJAX などによるポーリング)でなんとかしてくれ、的なものなのかなーと思っていましたが…
ごく一般的な構成を採用する場合、インターネット上に配置されたサーバとクライアントとの間で HTTP 接続を使用してやりとりする以上、サーバからクライアントに対して接続を行うことはできません。
なので、表面的にはいかにもサーバ主導でクライアントに対して通知が送られてきているように見えても、最下層ではクライアントからポーリング的な操作が行われているはずです。
# 若干の例外もあるにはありますが、ごく一般的な Web システム前提ということで… (どーせその例外を IIS はサポートしてませんし)
2010年6月2日 11:52 -
渋木宏明様、返信ありがとうございます。
>>ASP.NETのクエリ通知のように
>↑って、Web アプリケーションのクライアント側まで直接的に通知が到達するんでしたっけ?
サーバー側にあるASP.NETまでの通知で、クライアントまでは通知は到達してませんでした・・。 思い違いをしていました。
>ごく一般的な構成を採用する場合、インターネット上に配置されたサーバとクライアントとの間で HTTP 接続を使用してやりとり
>する以上、サーバからクライアントに対して接続を行うことはできません。
やはり難しいのですね・・。 記載頂いたように、クライアントからのポーリングで実装方法を検討してみます。
2010年6月2日 23:46 -
>サーバー側にあるASP.NETまでの通知で、クライアントまでは通知は到達してませんでした・・。
やっぱりそうですよね (^^;
実際に使った事ないので、うろ覚えレベルでしたが>じぶん
>クライアントからのポーリングで実装方法を検討してみます。
最下層ではポーリングにならざるを得ませんが、自作するとなると工数も発生しますし、総合的な品質を確保するのもなかなかムズカシイと思います。
なので、ミドルウェアなど、なんらかの既存の基盤をりようするのが良い気がします。(具体的な製品とかしらないのですが。。。)
>別途ポートを開くことが可能であれば、これが一番ではないでしょうか?
イントラなら有りだと思いますが、インターネット上に配置するようなサービスの場合はちょと厳しいんじゃないでしょうか。
2010年6月3日 0:27 -
話が少し戻りますが、SilverlightではPollingDuplexHttpBindingが使用できるようなので、これも検討する余地はありそうです。
情報源はこちら。
http://www.microsoft.com/japan/powerpro/TF/column/st3_01_3.mspx
http://msdn.microsoft.com/ja-jp/library/dd470106(VS.95).aspx
2010年6月8日 15:43