我有ASP.NET Web應用程序調用的WCF服務。當每個頁面請求有多個呼叫時,最好是讓客戶端保持打開狀態,並在整個請求中共享實例,或者如下所示,爲每次服務呼叫創建和處理客戶端更好?每個ASP.NET請求的WCF客戶端?
using (var client = new WcfClient())
{
var result = client.Method();
}
我有ASP.NET Web應用程序調用的WCF服務。當每個頁面請求有多個呼叫時,最好是讓客戶端保持打開狀態,並在整個請求中共享實例,或者如下所示,爲每次服務呼叫創建和處理客戶端更好?每個ASP.NET請求的WCF客戶端?
using (var client = new WcfClient())
{
var result = client.Method();
}
如果您使用的WebHttpBinding,WsHttpBinding的或basicHttpBinding的,默認的行爲是爲每個客戶端請求(電話),以獲得Web服務對象(S)自己獨特的連接和實例。這意味着,當客戶端A和B向您的Web服務發送請求時,每個客戶端都會獲得它自己的服務實例,由主機程序實例化,然後在響應被髮送回客戶端時整齊地處理(希望)。 WCF .NET基礎結構和託管程序負責爲您創建和銷燬所有連接和對象,除非您劫持該進程並執行某些操作。
可以創建持久的客戶端會話,使連接處於打開狀態並將服務留在內存中,但我從未嘗試過。下面是一個解釋如何做的鏈接: WCF sessions with a wsHttpBinding and without windows security
在過去的兩年中,我一直在工業規模上完全使用WCF客戶端和主機軟件,沒有太多理由擔心效率在WCF Web服務上不斷打開和關閉連接。我使用數百個併發客戶端連接對我們的測試服務進行了基準測試,每個客戶端連接都上傳和下載文件,並且幾乎沒有強調WCF服務器的CPU。在我們的測試中,大部分壓力(像往常一樣)落在數據庫方面。
它更好地編寫代碼,一舉成功。如果你有一些例外,我會創建並銷燬客戶端,而不是保留它。 – granadaCoder