2009-01-20 31 views

回答

3

你是對的。 SingleCall爲每次調用構建對象,並且可以接受多個同時請求,但不能在調用之間共享數據,而Singleton構建單個對象以處理允許數據共享的多個調用,但限制同時連接。但是,如果您有一些關於如何構建線程安全對象的概念,則可以執行一些調整。

首先,我會建議使用Singleton,因爲它只爲許多人創建一次。這也具有讓您存儲信息並在連接到用戶之間共享信息的優勢,而無需經常打開外部商店。

其次,我會研究將ConcurrencyMode = ConcurrencyMode.Multiple添加到服務的ServiceBehaviors中。這允許多個用戶同時擊中你的單身人士。

[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)] 
public class CalculatorService : ICalculatorConcurrency 
{ 
    … 
} 

第三,清理任何使這個類不是線程安全的代碼。當訪問多線程可以同時訪問的局部變量時,應該鎖定對象。

大量有關這些話題良好的信息可以在這裏找到:

http://msdn.microsoft.com/en-us/library/ms731193.aspx