2012-05-06 11 views
0

私はLAN内でいくつかの他のサービスを呼び出すWCFサービスに直面しているインターネットを持っています。 この呼び出しには数秒かかる場合があります。長いプロセスでjqueryからのWCF呼び出し

jQuery経由でこのWCFサービスを呼び出し、スレッドが応答を返すとUIを更新します。

サービスの実行中にユーザーが別のページに移動すると、新しいページのjqueryによる2回目の呼び出しで、別のスレッドでプロセスが再開されないようにします。

このタイプの動作を制御するパターンまたはWCF機能はありますか?

答えて

0

ここでの問題は、ブラウザがステートレスであることです。あるページのHTML、CSS、およびJavaScriptは、別のページとは全く別のコンテキストで読み込まれます。したがって、プロセスが実行され続けても、データがロードされなくなるため、ページにデータを戻すことはできません。

ユーザーがページを変更してもUIが更新されているように思えます。これは、Cometを使用することで可能になります。

彗星の仕組みは、ブラウザからサーバーへのHTTPリクエストを開くことです。サーバーは、クライアントにプッシュバックする必要のあるデータがあるまで、その接続を開いたままにします。サーバーは準備が整うと、クライアントに応答を送信します。

このテクニックは、何かが変更されたときにNクライアントを新鮮なデータで更新するために一般的に使用されますが、これを使用して特定の要求から応答を切り離すことができます。つまり、サーバーに対して行われた要求が応答を受け取らないように、アプリケーションをセットアップすることができます。代わりに、サーバーは彗星接続を介して更新を渡します。

このようにすると、結果を計算した後でもリクエストを行った後にページを変更したクライアントがUIに更新を受け取ることが確実になります。

多くの主要なプラットフォームでは、Java、PHP、.NET、node.jsがサポートされています。

サポートを得ているもう1つの同様のテクニックはWebSocketsです。ただし、すべてのブラウザがこのテクニックをサポートしているわけではありません。まず、特定のプラットフォームでCometに関するいくつかの調査を行い、より具体的な質問があれば、ここで質問することができます。がんばろう!

+0

ありがとうございました!私は彗星を見るだろう。このサイトは認証されたユーザー専用のサイトなので、私はおそらくセッションを使って状態の完全な感覚をシミュレートできると思っていました。 –

+0

あなたが直面している問題は、データを取得するために新しいページで依頼する必要があることです。また、その結果を計算し直すプロセスをやり直したくないので、岩と堅い場所の間にくっついている。セッションがあっても、新しいページでは他のスレッドで何が起こっているのか分かりませんし、サーバーへの独自の要求にしかなりません。 Cometは、元の要求を行ったプロセスやページに関係なく、実際にデータをクライアントにプッシュすることで、サーバーのポーリングが不要であることを保証します。 – jmort253

+0

私は、あなたの結果を計算し、それをキャッシュに保存し、次にキャッシュに保存されているものを単純に返す「データを渡す」リクエストという2つのプロセス、「クランチ・ナンバー」リクエストを持つこともできると思うが、データがいつ準備されているかを知るためにサーバーをポーリングする必要があるため、複雑でリソースが多くなります。この問題は、まさにCometが解決しようとしている問題です。 – jmort253

関連する問題