2010-09-06 75 views
3

我已經被打上了ServiceBehavior服務屬性WCF是否在同一個線程中的Singleton WCF服務中執行操作?

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, 
ConcurrencyMode = ConcurrencyMode.Multiple)] 

有由同一線程執行的任何機會,在這個服務中的操作?

我在ThreadLocal變量中存儲了一個重要的數據,它將用於單個執行操作。

回答

3

不,

每個請求在不同的線程中回答。 InstanceContextMode.Single屬性指定該服務爲每個請求使用相同的對象(及其成員)。

+1

爲了清楚起見,每個請求/線程都排隊使用同一個對象 – 2010-09-06 12:55:52

2

請注意,WCF中的線程是由ThreadPool =>處理的。>線程在請求​​處理後不會處理,但會返回到池中,因此可以將其重用於其他請求處理。我不確定它如何與ThreadLocal <T>一起工作,但是使用ThreadStaticAttribute,它可以很容易地將值從一個請求處理傳遞到下一個將使用相同Thread的隨機請求處理。

+0

好的,但一個線程不能同時用於執行多個操作。所以我很安全,如果我在每次操作後刪除ThreadStatic/ThreadLocal <>變量? – Sandeep 2010-09-06 15:13:49

+0

我不知道WCF中的任何線程切換,所以我說是的,你應該是安全的。但是如果你在你的應用程序中發現了一些奇怪的非確定性行爲,這應該是你檢查的第一個區域。 – 2010-09-06 19:42:40

+0

實際上,在異步服務操作中可能會有線程切換,但我認爲您不要使用它們:http://msdn.microsoft.com/zh-cn/library/ms734701.aspx – 2010-09-06 19:52:06

相關問題