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 问题吗?理想情况下,我想告诉 asp.net 在 bing 结果返回时做出响应。

4

2 回答 2

0

我曾经做过一个项目,我需要通过递归导航到所有内部链接来解析网站结构。我使用一个普通的 ASP.NET 应用程序作为前端和一个 WCF 服务(不记得它是托管在 IIS 中还是作为 Windows 服务)来完成实际工作。

由于遍历所有链接的过程可能需要很长时间才能完成(另外我需要定期通知用户进度)我实现了一个异步服务操作(MSDN 参考)来执行实际解析(称为服务器端)和用于池化任务状态的同步任务(使用 AJAX 定期在客户端调用)。

此 SO 问题包含有关该主题的一些有用链接:如何异步调用我的 WCF 服务?

希望这会对您有所帮助。

于 2012-06-29T09:36:51.400 回答
0

不,你要做的是返回一个完整的网页,嵌入 javascript(jquery 很流行,虽然 atlas 可以更好地与 asp.net 集成),它将在页面已经呈现后执行异步调用,然后替换相关包含您加载的内容的 DOM 部分(通常用 CSS id 标记)。这样,用户会看到除了 throbber 之外的所有内容,一旦准备好,它将被最终的文本、图像或您正在加载的任何内容替换。

您可以将异步调用转到您的服务器,这样您就可以在服务器端进行额外的按摩,但这很少值得付出努力。Javascript 几乎可以处理您需要的任何按摩。

于 2012-06-29T09:18:52.580 回答