Asp.net 通过pagemethods访问时出现会话问题
我在通过pagemethods访问会话中的值时遇到问题 下面的示例以简单的形式演示了该问题。页面上有三个按钮,每个按钮调用一个不同的pagemethod,该方法反过来访问会话中我期望的相同变量。事实上,每个pagemethod返回的值都不同,如下所示 我只有在部署到Web服务器时才会遇到这个问题;当我在本地测试它时,这不是一个问题Asp.net 通过pagemethods访问时出现会话问题,asp.net,vb.net,session,session-state,Asp.net,Vb.net,Session,Session State,我在通过pagemethods访问会话中的值时遇到问题 下面的示例以简单的形式演示了该问题。页面上有三个按钮,每个按钮调用一个不同的pagemethod,该方法反过来访问会话中我期望的相同变量。事实上,每个pagemethod返回的值都不同,如下所示 我只有在部署到Web服务器时才会遇到这个问题;当我在本地测试它时,这不是一个问题 Example output: Method Session Value DoMethod1 597cbe1c-5391-4b93-af6b-0da
Example output:
Method Session Value
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod2 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod3 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod2 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod1 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod3 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod2 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod3 35df48aa-8a58-4008-b353-be7b9f950395
Imports System.Web.Services
Public Class MethodResult
Public MethodName As String
Public SessionID As String
Public SessionValue As Object
End Class
Partial Public Class sessiontest
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function DoMethod1() As MethodResult
If HttpContext.Current.Session("sharedvalue") Is Nothing Then
HttpContext.Current.Session("sharedvalue") = Guid.NewGuid
End If
Dim ret = New MethodResult
ret.MethodName = "DoMethod1"
ret.SessionID = HttpContext.Current.Session.SessionID
ret.SessionValue = HttpContext.Current.Session("sharedvalue")
Return ret
End Function
<WebMethod()> _
Public Shared Function DoMethod2() As MethodResult
If HttpContext.Current.Session("sharedvalue") Is Nothing Then
HttpContext.Current.Session("sharedvalue") = Guid.NewGuid
End If
Dim ret = New MethodResult
ret.MethodName = "DoMethod2"
ret.SessionID = HttpContext.Current.Session.SessionID
ret.SessionValue = HttpContext.Current.Session("sharedvalue")
Return ret
End Function
<WebMethod()> _
Public Shared Function DoMethod3() As MethodResult
If HttpContext.Current.Session("sharedvalue") Is Nothing Then
HttpContext.Current.Session("sharedvalue") = Guid.NewGuid
End If
Dim ret = New MethodResult
ret.MethodName = "DoMethod3"
ret.SessionID = HttpContext.Current.Session.SessionID
ret.SessionValue = HttpContext.Current.Session("sharedvalue")
Return ret
End Function
End Class
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="sessiontest.aspx.vb" Inherits="project1.sessiontest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<script type="text/javascript">
function method1() {
PageMethods.DoMethod1(methodComplete);
}
function method2() {
PageMethods.DoMethod2(methodComplete);
}
function method3() {
PageMethods.DoMethod3(methodComplete);
}
//complete
function methodComplete(result) {
document.getElementById('output').innerHTML += "<tr><td>" + result.MethodName + "</td><td>" + result.SessionID + "</td><td>" + result.SessionValue + "</td></tr>";
}
</script>
<div>
<input type="button" value="Method 1" onclick="method1();" id="btn1" />
<br />
<input type="button" value="Method 2" onclick="method2();" id="Button1" />
<br />
<input type="button" value="Method 3" onclick="method3();" id="Button2" />
<br />
<table id="output" style="width:100%;">
<tr>
<th>Method Name</th>
<th>Session ID</th>
<th>Session Value</th>
</tr>
</table>
</div>
</form>
</body>
</html>
示例输出:
方法会话值
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod2 35df48aa-8a58-4008-b353-be7b9f950395
方法3 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
方法2 597cbe1c-5391-4b93-af6b-0da0068b264b
DoMethod1 35df48aa-8a58-4008-b353-be7b9f950395
方法3 35df48aa-8a58-4008-b353-be7b9f950395
DoMethod1 597cbe1c-5391-4b93-af6b-0da0068b264b
方法2 597cbe1c-5391-4b93-af6b-0da0068b264b
方法3 35df48aa-8a58-4008-b353-be7b9f950395
导入System.Web.Services
公共类方法结果
作为字符串的公共方法名
作为字符串的公共会话ID
作为对象的公共SessionValue
末级
部分公共类会话测试
继承System.Web.UI.Page
_
公共共享函数DoMethod1()作为MethodResult
如果HttpContext.Current.Session(“sharedvalue”)为空,则
HttpContext.Current.Session(“sharedvalue”)=Guid.NewGuid
如果结束
Dim ret=新方法结果
ret.MethodName=“DoMethod1”
ret.SessionID=HttpContext.Current.Session.SessionID
ret.SessionValue=HttpContext.Current.Session(“sharedvalue”)
回程网
端函数
_
作为MethodResult的公共共享函数DoMethod2()
如果HttpContext.Current.Session(“sharedvalue”)为空,则
HttpContext.Current.Session(“sharedvalue”)=Guid.NewGuid
如果结束
Dim ret=新方法结果
ret.MethodName=“DoMethod2”
ret.SessionID=HttpContext.Current.Session.SessionID
ret.SessionValue=HttpContext.Current.Session(“sharedvalue”)
回程网
端函数
_
公共共享函数DoMethod3()作为MethodResult
如果HttpContext.Current.Session(“sharedvalue”)为空,则
HttpContext.Current.Session(“sharedvalue”)=Guid.NewGuid
如果结束
Dim ret=新方法结果
ret.MethodName=“DoMethod3”
ret.SessionID=HttpContext.Current.Session.SessionID
ret.SessionValue=HttpContext.Current.Session(“sharedvalue”)
回程网
端函数
末级
函数method1(){
PageMethods.DoMethod1(方法完成);
}
函数方法2(){
PageMethods.DoMethod2(方法完成);
}
函数方法3(){
PageMethods.DoMethod3(方法完成);
}
//完整的
函数方法完成(结果){
document.getElementById('output').innerHTML+=“”+result.MethodName+“”+result.SessionID+“”+result.SessionValue+“”;
}
方法名
会话ID
会话值
您需要为web方法启用会话状态
例如:
<WebMethod(EnableSession:=True)> _
Public Shared Function DoMethod1() As MethodResult
If HttpContext.Current.Session("sharedvalue") Is Nothing Then
HttpContext.Current.Session("sharedvalue") = Guid.NewGuid
End If
Dim ret = New MethodResult
ret.MethodName = "DoMethod1"
ret.SessionID = HttpContext.Current.Session.SessionID
ret.SessionValue = HttpContext.Current.Session("sharedvalue")
Return ret
End Function
_
公共共享函数DoMethod1()作为MethodResult
如果HttpContext.Current.Session(“sharedvalue”)为空,则
HttpContext.Current.Session(“sharedvalue”)=Guid.NewGuid
如果结束
Dim ret=新方法结果
ret.MethodName=“DoMethod1”
ret.SessionID=HttpContext.Current.Session.SessionID
ret.SessionValue=HttpContext.Current.Session(“sharedvalue”)
回程网
端函数
查看此以了解更多信息