我有一個攔截器,從WCF請求的消息頭中選取數據。請看下圖:您可以在WCF中使用訪問HttpContext.Current.Items的靜態方法嗎?
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
_CurrentRequest = request;
SetupSecurityPrincipal();
ThreadExtension.PersonID = GetIntHeader(HeaderKeys.PersonID);
return null;
}
ThreadExtension
(忽略的名字,意味着什麼)是提供一個get /設置爲HttpContext.Current
靜態屬性的類。請看下圖:
public class ThreadExtension
{
public static int? PersonID
{
get { return (int?)HttpContext.Current.Items["PersonID"]; }
set { HttpContext.Current.Items["PersonID"] = value; }
}
}
所以,問題是從我們的Web請求結束我們的WCF Web服務,有時ThreadContext
變化的信息,如果我們有2個要求是足夠接近發生一起,造成一人在另一數據人的會議。
所以我的問題是,我們做錯了什麼?這裏使用靜態屬性不是正確的方法嗎?理想情況下,我們只需要一些與WCF中的請求相關的東西,這樣我們就可以在幾個地方找到它,而無需一直傳遞數據。
任何幫助或建議,你可以提供將不勝感激。
爲什麼該屬性是靜態的,如果它依賴於會話? – Yahia
我們正嘗試在一次呼叫的整個生命週期中訪問這些值,而不必爲每個呼叫傳遞值。我可能會想到這個錯誤,但我的印象是靜態屬性是一個傳遞給HttpContext。有沒有更好的辦法? –
您的WCF是否使用會話(例如使用netTCP綁定)?您如何將「PersonID」與整個通話相關聯?任何不直接使用HttpContext.Current.Items [「PersonID」]的理由? – Yahia