我在标记为a的页面上有一个方法,[WebMethod]
它使用一些会话状态作为其操作的一部分.在我编写这段代码之后,EnableSessionState
当你在a中使用会话状态时,我突然想要使用闪存[WebMethod]
(例如,请参阅此处:http://msdn.microsoft.com/en-us/library/byxd99hx.aspx) .但似乎工作正常.为什么?
示例代码背后:
protected void Page_Load(object sender, EventArgs args) {
this.Session["variable"] = "hey there";
}
[System.Web.Services.WebMethod]
public static string GetSessionVariable() {
return (string)HttpContext.Current.Session["variable"];
}
Run Code Online (Sandbox Code Playgroud)
样本体html:
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
function getSession() {
$.ajax({
type: 'POST',
url: 'Default.aspx/GetSessionVariable',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
document.getElementById("showSessionVariable").innerHTML = msg.d;
}
});
return false;
}
</script>
<form id="form1" runat="server">
<div id="showSessionVariable"></div>
<button onclick='return getSession()'>Get Session Variable</button>
</form>
Run Code Online (Sandbox Code Playgroud) 我在System.Web.UI.Page中使用一些WebMethod来处理一些ajax请求,我试图在会话中存储一个对象,以便在几个ajax请求之后保留信息,甚至在离开页面并返回之后.
我正在访问会话HttpContext.Current.Session("foo")
,如果它没什么,我通过它设置它HttpContext.Current.Session("foo") = New Bar()
.
我遇到的问题是,在设置之后,下次我按下该方法时它已被重置.我尝试更改在其他地方设置的其他会话变量,它们也会被还原.这告诉我,我正在获取会话状态的副本,而不是我可以更新并导致从请求到请求持久化的引用.我仔细检查EnableSession
了WebMethod 的属性是否为True,但仍未保留更改为会话状态.
方法声明:
<System.Web.Services.WebMethod(EnableSession:=True)>
Public Shared Function foo(ByVal woNum As String, ByVal workCenter as String) As ToolingModel
Return ToolingModel.getSessionTooling(woNum, workCenter)
End Function
Run Code Online (Sandbox Code Playgroud)
getSessionTooling:
Public Shared Function getSessionTooling(woNum As String, workCenter As String) As ToolingModel
Dim tooling As ToolingModel = HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY)
If tooling Is Nothing Then
tooling = New ToolingModel(woNum, workCenter)
HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY) = tooling
ElseIf tooling.woNum <> woNum OrElse tooling.workCenter <> workCenter Then
tooling.woNum = woNum
tooling.workCenter = workCenter
tooling.assets.Clear() …
Run Code Online (Sandbox Code Playgroud) 我尝试将我的对象存储在asmx Web服务中的会话中
user = new MyUser(UserName);
Session["user"] = user;
Run Code Online (Sandbox Code Playgroud)
并从页面加载部分的主页读取,但我得到null
user = (MyUser)Session["user"];
Run Code Online (Sandbox Code Playgroud)
当我尝试使用简单的字符串而不是MyUser
对象时它可以工作
任何的想法?
谢谢.