2012-06-29 77 views
0

我正在使用由asp.net/IIS託管的WCF項目。這WCF服務有一個名爲SearchImage方法,它看起來像這樣:如何在asp.net中響應用戶請求時避免阻止IO操作

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響應。

+0

你可以從另一個方向看它嗎?在網頁上啓動AJAX,AJAX處理程序然後調用WCF?通過這種方式,用戶可以立即從網站獲得響應,WCF可以隨時獲得所需的所有時間 – freefaller

回答

0

不需要。你必須做的是返回一個完整的網頁,嵌入JavaScript(jQuery是流行的,雖然地圖集可以更好地與asp.net集成),它將在頁面已經被渲染後執行異步調用,然後將相關的DOM部分(通常用CSS標籤標記)替換爲您加載的內容。這樣,用戶可以看到所有加載的內容,但是一個跳動者,它將被最終的文本,圖像或準備好的任何內容所取代。

您可以將異步調用發送到您的服務器,以便您可以執行額外的按摩服務器端,但這很難做到。 Javascript幾乎可以處理任何你需要的按摩。

+0

但是這是一個純數據服務,沒有涉及到JavaScript /網頁。所以沒有辦法避免塊IO? –

+0

我不確定你的意思,但是如果它是類似於web服務的東西,不,通常沒有辦法返回部分結果,然後一旦IO完成就返回並返回更多。當然,取決於API,但看起來你運氣不好。 – SilverbackNet

+0

我明白了。謝謝,看來我需要忍受它。 :-) –

0

我曾經在一個項目中工作,我需要通過遞歸導航到所有內部鏈接來解析網站結構。我使用了一個普通的ASP.NET應用程序作爲前端和一個WCF服務(不記得它是否託管在IIS中或作爲Windows服務),它執行實際的工作。由於遍歷所有鏈接的過程可能需要很長時間才能完成(另外我需要定期通知用戶進度),我實現了一個用於執行實際解析的異步服務操作(MSDN reference)(稱爲服務器端解析)側)和一個用於彙集任務狀態的同步服務器(使用AJAX定期調用客戶端)。

這太問題包含有關問題的一些有用的鏈接:How to make a call to my WCF service asynchronous?

希望這將幫助你一點。

+0

對不起,它仍然不相關。我的問題不在於客戶端的異步調用。 –

相關問題