1. 程式人生 > >WCF 服務端的非同步

WCF 服務端的非同步

WCF的非同步可分為客戶端和服務端這篇文章介紹服務端的非同步實現

        自己碰到了這樣的一個問題, 我們系統的服務端資料量特別大,程式執行時間長,導致客戶端請求會中斷連結,這樣客戶端就得不到迴應,所以因這個問題對WCF的非同步做了一些研究,但是發現它並不是解決這個問題的辦法。下面我講下服務端非同步。

        服務端非同步,WCF技術內幕這本書中就簡單的幾句話。操作中執行I/O的操作,這樣可以用非同步,因為這樣可以帶來更多的伸縮性。如果只單純的執行計算任務,沒必要使用非同步,因為這會導致效能問題。

        在這裡,我以個人的瞭解,解釋下服務端非同步的作用和使用的情況。非同步操作是釋放當前執行緒,讓另一個執行緒去執行任務。對於服務端的程式而言,接收請求的執行緒有限,所以如果當前執行緒在執行任務,這樣就沒有辦法去處理新的請求,而降低了請求的併發量。如果釋放了這個執行緒,那它又可以去處理新進來的請求,從而提高請求的併發量。當然執行緒的切換會消耗時間和資源。所以一般在I/O請求等耗時的操作上使用服務端非同步。

        至於服務端的非同步實現方式,網上有很多,在這裡我推薦幾個網址給大家。

        經過我的測試,必須要根據約定定義方法,返回值必須為IAsyncResult的子類

public IAsyncResult BeginGetData(string fileName, AsyncCallback userCallback, object stateObject)
public string EndGetData(IAsyncResult ar)
        這樣,WCF框架才能幫你呼叫BeginGetData,等執行完成後,再幫你呼叫EndGetData,返回值給客戶端。