我正在研究由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结果返回时做出响应。
答案 0 :(得分:0)
没有。你需要做的是返回一个完整的网页,嵌入了javascript(jquery很流行,虽然atlas可以更好地与asp.net集成),它将在页面呈现后执行异步调用,然后替换相关的DOM部分(通常用CSS id标记)包含您加载的内容。这样,用户可以看到所有已加载的内容,但会被最终文本,图像或其准备好后正在加载的任何内容所取代。
您可以将异步呼叫转到您的服务器,以便您可以进行额外的按摩服务器端,但这很少值得付出努力。 Javascript几乎可以处理您需要的任何按摩。
答案 1 :(得分:0)
我曾经参与过一个项目,我需要通过递归导航到所有内部链接来解析网站结构。我使用普通的ASP.NET应用程序作为前端和WCF服务(不记得它是在IIS中还是作为Windows服务托管)来完成实际工作。
由于遍历所有链接的过程可能需要很长时间才能完成(而且我需要定期通知用户进度)我实现了异步服务操作(MSDN reference)以执行实际解析(是称为服务器端)和用于汇集任务状态的同步(使用AJAX定期称为客户端)。
此SO问题包含有关主题的一些有用链接:How to make a call to my WCF service asynchronous?
希望这会对你有所帮助。