无法从客户端的ajax获取Web服务中的会话状态
Cannot get Session state in Web Service from ajax on client
我希望每个用户只有1个会话。但是当我运行ajax查询时,系统会生成一个新的会话。当我在我的计算机上调试模式下测试它时,没有任何问题。仅在分布式应用程序的客户端站点出现问题。
ASP页面:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<input id="Text1" type="text" /><br />
<asp:Button ID="btn_ASP" runat="server" onclick="btn_ASP_Click" Text="Asp" />
<input id="btn_JS" type="button" value="JS" onclick="GetUsersList();" /><br />
生成'ConnectCount'会话元素的Asp按钮:
protected void btn_ASP_Click(object sender, EventArgs e)
{
int count;
if (HttpContext.Current.Session["ConnectCount"] == null)
count = 1;
else
count = (int)HttpContext.Current.Session["ConnectCount"] + 1;
HttpContext.Current.Session["ConnectCount"] = count;
TextBox1.Text = count.ToString();
}
Web服务代码:
[WebMethod(EnableSession = true)]
[ScriptMethod]
public string Get_UsersList2()
{
int count;
if (HttpContext.Current.Session["ConnectCount"] == null)
count = 1;
else
count = (int)HttpContext.Current.Session["ConnectCount"] + 1;
HttpContext.Current.Session["ConnectCount"] = count;
return count.ToString();
}
对Web Service的Ajax查询
function GetUsersList() {
$.ajax({
url: '/WbSrv_ACTR.asmx/Get_UsersList2',
type: "POST",
contentType: "application/json; charset=utf-8",
data: '{}',
success: function (data, st) {
if (st == "success") {
if (data.d != "") {
text1.value = data.d;
}
else {
}
}
},
error: function () {
alert("Cannot get list of users");
}
});
}
按钮中的代码只是将1添加到会话["ConnectCount"]。
所以当我点击5次Asp按钮和1次JQ按钮(在本地IIS -测试):
result: asp = 5, jq = 6 (correct)
在IIS 7.5服务器上执行相同的操作:
result: asp = 5, jq = 1 (incorrect)
服务器正在使用其他会话。为了测试-我通过ASP按钮在会话中添加了一些元素,无法在Web服务中找到它们(会话是空的,但SessionID是相同的)
是否有人有解决方案或解决方案?
Web配置:
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<customErrors mode="Off" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
这是在web服务中使用会话的错误方式
Session["ConnectCount"];
正确的方法是
HttpContext.Current.Session["ConnectCount"];
你的函数应该是
[WebMethod(EnableSession = true)]
[ScriptMethod]
public string Get_UsersList2()
{
int count;
if ( HttpContext.Current.Session["ConnectCount"] == null)
count = 1;
else
count = (int) HttpContext.Current.Session["ConnectCount"] + 1;
HttpContext.Current.Session["ConnectCount"] = count;
return count.ToString();
}
参考
如何在webmethod中访问session ?
相关文章:
- 基于api密钥的NodeJS web服务
- 使用javascript在客户端上使用Web服务
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 从Javascript连接到SOAP Web服务
- 如何将javascript对象作为参数传递到c#web服务中
- AngularJS:使用维基百科API的web服务
- 从javascript调用C#Web服务并使用它(json格式)
- 从简单的html页面调用实时Web服务.
- 在JavaScriptAjax调用中从web服务中的XMLDocument获取响应.
- 如何使用 javascript 从 Web 服务重新加载项目集合
- 创建web服务“;活动指示器”-与所有浏览器兼容的类似指示符
- 如何将WinJS ListView绑定到web服务
- Ajax不调用Web服务
- 将web服务回调的结果绑定到Javascript中的调用函数
- 如何创建可从多个应用程序使用的PHP登录web服务
- Ajax发布到双节点NLB上的web服务
- 无法使用javascript客户端访问远程web服务
- 使用带有AngularJS的DocRaptor web服务
- 如何使用phonegap在android中调用asp.net Web服务
- 如何使应用程序加载独立于web服务调用