
我們有一個 Windows 應用程序,它呼叫 Web 服務方法來存取資料庫。我們發現對 IIS 上的 WCF 服務進行長時間(15 秒以上)非同步 Web 服務呼叫的情況。如果 UI 在此過程中進行其他阻塞(這是舊程式碼)的 Web 服務調用,那麼這些額外的調用將阻塞,直到初始非同步調用完成之後。
當 UI 和 Web 服務都在具有 IIS Express 的 Visual Studio 中運行時,不會發生這種情況:阻塞呼叫很快,並且所有這些事情在長非同步呼叫完成之前就完成了。
Web 服務均具有以下內容:
<serviceThrottling
maxConcurrentCalls="5000" maxConcurrentSessions="5000" maxConcurrentInstances="5000" />
此外,maxConnections="500" 無所不在。
我們希望 IIS 以與 IIS Express 相同的方式同時處理這些並發 Web 服務呼叫。
…
如果這有幫助的話,這一切就有意義了:我們搜尋對象。搜尋傳回符合條件的前 50 個(預設)項目,同時我們對相同查詢執行 count(*) 非同步呼叫。計數查詢可能需要很長時間。用戶堅持認為,有時他們想知道總計數是多少,但他們通常希望能夠在計數返回之前很久就打開結果列表中的物件。開啟物件是同步 Web 服務呼叫的切入點。