2011-02-01 11 views
3

Riaサービスを使用してSilverlightでアプリケーションを作成しています.Riaサービスを使用すると、サービスコールの開始後にかなり時間がかかることがあります。私はWCFサービスのタイムアウトを増やす方法を探しましたが、より多くのことを考えると、これは正しい解決策ではありません。Silverlight 4 WCF Riaサービスのポーリングパターン

私はむしろ、DomainContextを呼び出してすぐに戻り、クライアントに長期間実行されたクエリが完了したときに、サーバーをポーリングして調べるようにします。

私はこのようなものを実装するための良い方法のパターンや例を探しています。 Webサービスがサービスコールの間に状態を保持してはならないということが、今後も気になる問題です。しかし、これはまさに私がやっていることです。

どのような考えですか?

おかげで、

-Scott

答えて

1

WCF Duplex Serviceをご覧ください。あなたの問題を解決するはずです。

+0

私は現在、WCFサービスであるRiaサービスを使用していますが、これを稼働させるには多くのリファクタリングが必要になるようです。私はおそらく私が持っていた問題のために再びRiaを使用しないでしょうが、私はこのプロジェクトのためにそれに固執する必要があります。私は、サーバー上でシングルトンを作成し、複数のスレッドを生成することによって解決策に近づくことができましたが、サービスの呼び出し側が返すとすぐに、ObjectContextが破棄され、エンティティに当たったときにワーカースレッドが消滅します。私は本当にここにこだわっている。 – Scott

+0

@Scott:これを解決しても、一度にさまざまなクライアントがポーリングすると、各クライアントに何を返すかわからなくなります。 – jweyrich

+0

私は、各呼び出し側にトランザクションを要求するトークンを割り当てています。クライアントは、そのトークンを使用してサーバーをポーリングし、結果がまだ存在するかどうかを確認します。私は基本的に、クライアントがそれを取得するまでヒープ内の結果を保持しています。あるいは、クリーンな状態を維持する別のプロセスによって削除されます。それは紙の上ではよく見えますが、呼び出しスレッドがサービスを終了するとすぐにObjectContextを失うことは、私が期待していたものではありませんでした。回答ありがとうございます...それは、looongの夜になるだろう... – Scott

0

あなたはサービスの呼び出しを行うことができ、より少ない時間がかかりますか?そうでない場合は、どうしてですか?

通常、クエリでこの時間がかかるのを見ると、最後に実行されているSQLが十分に効率的でないこと、SQLサーバーのインデックスが貧弱であること、またはクライアントが実際よりもはるかに多くのデータを要求していること短時間で使用できるようにする。

たとえば、すぐに500個のエンティティをリクエストし、大きなリスト/ DataGrid /何を表示するのではなく、一度に10-50をリクエストして、ページングUIを持っていて、

+0

残念ながら、私は、検索用語に応じて、何千もの行を戻す可能性のある検索インデックスを検索しています。私はクエリのX個の結果を "スキップ"できません。あるいは、何らかの種類のページングシステムを実装します。私は実際にすべての結果を必要とします - もしすぐに見つからなければ、検索後の短い時間内に。これが、私がサーバー上の完全なクエリの状態を保存し、完了したときに戻って取得できるとわかった理由です。私はこれが一度に戻ってくるにはあまりにも多くのデータだと私はあなたに同意するが、私は他の方法を見つけることができません。その他の提案? – Scott

+0

照会している検索インデックスを制御していないためですか?その場合の「ほとんどのRIAサービスの方法」は、タイムアウトを増やすことではなく、「DomainContext」がポピュレートするのに時間がかかりますので、UIには何らかのインジケータが必要ですが、 'LoadOperation'進行中ですが、最終的にUIを更新するための 'INotifyCollectionChanged'イベントなどがすべて挿入されます。 –

+0

もちろん、私はあなたが照会しているインデックスの所有者と話をし、彼らに「やあ、私は必要以上のデータを要求し、より多くの帯域幅などを必要とします。あなたがページされた方法で私にデータを公開することができれば、私たちの両方にとってより良いでしょう」と彼らが言うことを見る。たぶん、あなたとこのインデックスの今後の顧客の両方に利益をもたらすので、彼らはそれに従順であるでしょう:)決して尋ねることが痛いです。 –

0

signalrを見てください。これはriaと並行して実行でき、メッセージをサーバーからクライアントにプッシュバックすることができます。

+0

私はWCF RIAとSilverlightと同様の状況があります。 signalRをwcf riaと一緒に使用する方法のサンプルコードがありますか? – user636525

+0

https://github.com/SignalR/SignalR サンプルを見るとSilverlight用のものもあります。 –

関連する問題