2012-05-04 19 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应用程序或平台中访问。