2014-12-03 105 views
0

我試圖做一個WCF web服務來向客戶端發送一些數據。客戶端在訪問數據之前必須進行身份驗證,所以我製作了一個身份驗證方法,它設置了一些會話變量。 當我嘗試在另一個方法中訪問這個會話變量時,它們總是NULL(我嘗試過使用WCF測試客戶端和一點Winforms測試客戶端)。在WCF中使用ASP.NET會話=每次調用都會丟失

我已經設置aspNetCompatibilityEnabled = 「真」我的web.config並添加屬性爲我服務類[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)

這個測試:

if (HttpContext.Current.Session[CONST_SESSION_AUTHENTICATE] != null &&  (bool)HttpContext.Current.Session[CONST_SESSION_AUTHENTICATE] == true) 

總是指空會話變量...

我錯過了什麼?

感謝

+1

我可以建議你要對這個錯誤的方式?嘗試在頭文件中傳遞令牌,而不是試圖使機制設計爲無狀態使用會話! – Liath 2014-12-03 12:23:44

回答

1

你怎麼稱呼你的服務?您必須使用相同的服務客戶端對象並允許Cookie。只有當客戶端發回由ASP .NET創建的cookie時,會話才能工作。

下面是一個例子:

http://stack247.wordpress.com/2011/03/09/enable-cookies-session-in-wcf-aspnetcompatibilityrequirements/

+0

我使用了Visual Studio提供的WCF測試客戶端來測試。在我的Winform應用程序中,我使用服務引用。這是否意味着WCF會話僅適用於ASP網站呼叫? – cdie 2014-12-03 11:58:49

+0

使用WCF測試客戶端將無法正常工作,但如果您打開App.Config並在綁定中設置allowCookies = true,則添加服務引用將起作用。 – Cosmin 2014-12-03 12:30:21

+0

基本上,您需要一個支持cookie的客戶端(當您執行第一個請求時,ASP .NET服務器將發回一個客戶端將存儲並返回每個識別請求的cookie。當您添加服務引用並啓用cookie時,您需要爲其他請求使用相同的serviceClient對象(您創建的每個serviceClient都有自己的cookie容器)。 – Cosmin 2014-12-03 12:32:07