2012-04-18 52 views
0

調用不同的線程外部Web服務這是當前功能:從Web服務

  1. 我的網站叫我的ASP.NET Web服務同步。
  2. 我的web服務在數據庫中創建一條記錄。
  3. 我的網絡服務立即向網站返回新的記錄ID。
  4. 我的網站向用戶顯示該記錄ID。

這一直工作正常。我必須添加一項功能,以便在步驟2之後,我的Web服務將調用1到6(取決於條件)外部Web服務。所以它看起來像這樣:

  1. 我的網站同步調用我的ASP.NET Web服務。
  2. 我的web服務在數據庫中創建一條記錄。
  3. 我的Web服務調用外部Web服務。合併結果並保存在數據庫中。
  4. 我的網絡服務向網站返回新的記錄ID。
  5. 我的網站向用戶顯示該記錄ID。

由於此新功能,現在網站請求可能需要10分鐘。所以這就是我想要實現新功能的方式。

  1. 我的網站同步調用我的ASP.NET Web服務。
  2. 我的web服務在數據庫中創建一條記錄。
  3. 我的web服務創建一個新線程並在該線程上調用一個方法(fire and forget)。此方法將調用外部Web服務,合併結果並保存在數據庫中。由於這將在另一個線程上,執行將在完成步驟3之前立即轉到步驟4.
  4. 我的Web服務立即向網站返回新記錄ID。
  5. 我的網站向用戶顯示該記錄ID。

此外,我想爲步驟3中創建的線程設置一些超時,以便任務必須在10分鐘內結束,如果不中止線程。

我試過ThreadPool.QueueUserWorkItem,它甚至沒有被調用,因爲它是後臺線程。最初線程/ Task.TaskFactory似乎是可行的,但爲每個請求創建一個新線程似乎並不是最佳實踐。

有人可以提供一些VB.NET代碼/參考的步驟3?特別是在一個單獨的線程上調用外部Web服務,如fire和forget,併爲該線程設置超時值?

感謝

+0

你有什麼嘗試?創建一個新的線程已經有很好的文檔記錄,並有大量代碼示例。你有沒有嘗試過某些東西,並得到錯誤,或者... http:// mattgemmell。COM/2008/12/08 /什麼具備的,你試了/ – David 2012-04-18 21:33:38

回答

1
closeTimeout="04:01:00" 
    openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" 
    allowCookies="false" bypassProxyOnLocal="false" 
    hostNameComparisonMode="StrongWildcard" 
    maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
    maxReceivedMessageSize="2147483647" 
    messageEncoding="Text" textEncoding="utf-8" 
    transferMode="StreamedResponse" 
    useDefaultWebProxy="true" 

試試這個在您的綁定屬性。它有助於增加超時時間並處理大數據(MB)