我已經被打上了ServiceBehavior服務屬性WCF是否在同一個線程中的Singleton WCF服務中執行操作?
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
有由同一線程執行的任何機會,在這個服務中的操作?
我在ThreadLocal變量中存儲了一個重要的數據,它將用於單個執行操作。
我已經被打上了ServiceBehavior服務屬性WCF是否在同一個線程中的Singleton WCF服務中執行操作?
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
有由同一線程執行的任何機會,在這個服務中的操作?
我在ThreadLocal變量中存儲了一個重要的數據,它將用於單個執行操作。
不,
每個請求在不同的線程中回答。 InstanceContextMode.Single屬性指定該服務爲每個請求使用相同的對象(及其成員)。
請注意,WCF中的線程是由ThreadPool =>處理的。>線程在請求處理後不會處理,但會返回到池中,因此可以將其重用於其他請求處理。我不確定它如何與ThreadLocal <T>一起工作,但是使用ThreadStaticAttribute,它可以很容易地將值從一個請求處理傳遞到下一個將使用相同Thread的隨機請求處理。
好的,但一個線程不能同時用於執行多個操作。所以我很安全,如果我在每次操作後刪除ThreadStatic/ThreadLocal <>變量? – Sandeep 2010-09-06 15:13:49
我不知道WCF中的任何線程切換,所以我說是的,你應該是安全的。但是如果你在你的應用程序中發現了一些奇怪的非確定性行爲,這應該是你檢查的第一個區域。 – 2010-09-06 19:42:40
實際上,在異步服務操作中可能會有線程切換,但我認爲您不要使用它們:http://msdn.microsoft.com/zh-cn/library/ms734701.aspx – 2010-09-06 19:52:06
爲了清楚起見,每個請求/線程都排隊使用同一個對象 – 2010-09-06 12:55:52