2013-11-15 73 views
0

我正在開發一個使用WCF服務的ASP.NET網站。我使用以下方法創建服務客戶端對象:靜態WCF服務客戶端對象或標準WCF服務客戶端對象?

我正在使用全局類文件來定義這些方法。

public static WCore.Service1Client client; 
public static int ConnectToWCore() 
{ 
    try 
    { 
     client = new WCore.Service1Client(); 
    } 
    catch (Exception) 
    { 
     return -1; 
    } 
    return 0; 
} 

所以我的問題是,是否正確使用靜態客戶端對象在網站上?因爲我很困惑它可能有死鎖問題,因爲許多用戶將訪問同一個對象,因爲靜態對象只創建一次,並且對所有實例都是通用的。請告訴我哪一個是高效的靜態對象或標準對象?

回答

2

WCF客戶端旨在輕量化,並在需要時創建。除非您實際測量了創建多個客戶端對象時的性能問題,否則應該這樣做。

還使用錯誤代碼返回值是不正確的方式來處理C#中的錯誤。 C#使用異常,這就是所有C#代碼應該更喜歡使用的。

+0

但是我想知道哪些在性能方面更高效?對不同的用戶使用相同的靜態客戶端或不同的對象?你的建議是什麼?我最終應該使用多個併發用戶的網站? –

0

我不認爲爲WCF使用靜態服務客戶端是一個很好的舉措,因爲我已經看到幾乎在所有情況下都會在需要時創建它,然後進行處理。

糾正我,如果我錯了,但堅持服務客戶端是浪費資源和開放機會的各種問題,如會話丟失,超時以及其他問題。通常的做法是按需創建它們,做你的業務然後處理這個對象。

另外,我認爲ASP網站在客戶端之間是「實例化」的,每個客戶端都有自己獨立的同一個網站副本。因此,您可能遇到更多問題,因爲多個客戶端試圖一次訪問同一個服務客戶端。

+0

不,ASP網站不是「實例化」每個客戶端。只有一個網站。可能不同的是,服務器啓動多個線程(或同一進程的多個實例)來處理每個傳入的請求,但網站的內容是相同的。 –