2012-05-04 50 views
4

是否可以通過使用SessionID從WCF服務訪問Asp.net會話變量。通過使用jQuery解析sessionID從WCF服務訪問會話變量

我的服務是從jQuery調用的,我的想法是使用jQuery解析sessionID到服務中,然後設置所需的變量,但是我找不到一種方法來執行此操作。

,這裏是我的jQuery調用

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: baseURL, 
    data: JSON.stringify(data), 
    dataType: "json", 
    success: function (data) { 

有誰知道它是在所有可能的或暗示的另一種方式設置會話相關的變量?

+0

我已經在我的應用程序中使用支持AJAX的WCF服務來訪問使用jQuery的服務器上的數據。但是,我不需要傳遞會話ID或類似的東西,因爲會話cookie將被自動傳遞給服務器(也是在使用jQuery時)。如果您使用的是URL會話,那麼這是另一回事;) – Nicholas

回答

5

來自瀏覽器的jQuery請求將包含會話cookie,因此如果您在ASP.NET兼容模式下運行您的WCF服務,它已直接訪問當前的HttpContext,這意味着您可以從中訪問會話狀態那裏。這裏是你如何啓用WCF服務這種整合:

首先,下面的屬性添加到您的服務類:

[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] 

接下來,添加以下到您的服務的.config:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <!-- whatever else you already have --> 
</system.serviceModel>` 

一旦你這樣做,你可以訪問當前HttpContext搶會話狀態,像這樣:

public void MyServiceOperation() 
{ 
    string myStoredValue = HttpContext.Current.Session["MyStoredValue"]; 

    // whatever 
} 
+0

我添加了上面編寫的代碼,但它接近我無法訪問我的變量。我的會話變量已經在aspx文檔中設置,該文檔也包含jquery代碼。但是當我試圖從我的web服務訪問變量(託管在同一個IIS上的虛擬目錄中)時,它在HttpContext.Current.Session.count上的計數上返回0。任何其他想法? – user801010

+1

好吧,現在我想我找到了問題。無法將WCF服務託管在虛擬目錄中,而將網站託管在另一個虛擬目錄中!他們必須在同一個應用程序中才能處理同一個會話(這是有道理的)。當我將我的服務移動到應用程序時,它工作正常,所以我認爲問題已解決:)謝謝 – user801010

+0

謝謝德魯。 :-) – user96403

2

您可以將會話對象存儲在數據庫本身中,以允許您在不同的Web應用程序或平臺中訪問。