0

asp.net/IIS がホストする WCF プロジェクトに取り組んでいます。この WCF サービスには、次のような SearchImage というメソッドがあります。

string SearchImage(string query)
{
  //call bing service to get the images
  //it is very time-consuming
  return result.
}

bing サービスへの呼び出しは非常に時間がかかります。これは、サービスに大きな影響を与える可能性があります。非同期呼び出しはここでは役に立ちません:

string SearchImage(string query)
{
  //async call bing service to get the images
  WaitForComplete();
  return result.
}

ご覧のとおり、bing が結果を返すまで待つ必要があります。

私の質問は、この種のブロック IO の問題を回避する技術はありますか? 理想的には、bing の結果が戻ってきたときに応答するように asp.net に伝えたいと思います。

4

2 に答える 2

0

いいえ。あなたがしなければならないことは、ページがすでにレンダリングされた後に非同期呼び出しを実行し、関連するロードしたコンテンツを含む DOM セクション (通常は CSS ID でタグ付け)。そうすれば、ユーザーはロードされたものをすべて見ることができますが、throbber は最終的なテキスト、画像、または準備ができたらロードしているものに置き換えられます。

サーバー側で追加のマッサージを行うことができるように、非同期呼び出しをサーバーに送ることができますが、それは努力する価値がほとんどありません. Javascript は、必要なほとんどすべてのマッサージを処理できます。

于 2012-06-29T09:18:52.580 に答える
0

私はかつて、すべての内部リンクに再帰的に移動して、Web サイトの構造を解析する必要があるプロジェクトに取り組んでいました。私はプレーンな ASP.NET アプリケーションをフロントエンドとして使用し、WCF サービス (IIS でホストされていたか Windows サービスとしてホストされていたかは覚えていません) を使用しました。

すべてのリンクをたどるプロセスは完了するまでに長い時間がかかる可能性があるため (さらに、定期的に進行状況をユーザーに通知する必要がありました)、実際の解析 (サーバー側と呼ばれていました) を実行するための非同期サービス操作 ( MSDN 参照) を実装し、タスクのステータスをプールするための同期のもの(AJAXを使用してクライアント側で定期的に呼び出されました)。

この SO の質問には、件名に関するいくつかの役立つリンクが含まれています: How to make a call to my WCF service asynchronous?

これが少し役立つことを願っています。

于 2012-06-29T09:36:51.400 に答える