2012-09-07 105 views
1

在.net 4中,是否有可能在Thread.CurrentThread對象中存儲自定義值(如userid)?Thread.CurrentThread存儲自定義數據,如userid

我試圖商店爲用戶標識WCF客戶端上MessageInspector的AfterReceiveRequest方法在客戶端如下:

request.Headers.Add(MessageHeader.CreateHeader("userid", string.Empty, userid)); 

在服務器端,我想找回它在Thread.CurrentThread的方法AfterReceiveRequest。

這可能嗎?

+1

如果你去異步(在.NET 4.5相當普遍),這可能被證明是一種做事的方式有問題,因爲線程維護你的代碼可以是任何線程池中 – spender

+1

一個你爲什麼不去服務器上的OperationContext.Current上的頭文件集合? – lgoncalves

+0

[可以在哪裏存儲當前WCF調用的數據? ThreadStatic安全嗎?](http://stackoverflow.com/questions/1895732/where-to-store-data-for-current-wcf-call-is-threadstatic-safe) –

回答

2

不建議使用ThreadStatic,因爲WCF將隨機使用線程池中的線程,並且ThreadStatic變量在線程回收時不會重新初始化。此外,如果您有多個WCF調用的會話,則相同的服務實例可能會將線程從呼叫轉換爲呼叫。

您應該創建一個OperationContext擴展。

Where to store data for current WCF call? Is ThreadStatic safe?

相關問題