在调用 ASMX Web 服务时保持会话
Posted
技术标签:
【中文标题】在调用 ASMX Web 服务时保持会话【英文标题】:Maintain Session While Calling an ASMX Web Service 【发布时间】:2011-12-19 04:39:53 【问题描述】:我正在使用客户端应用程序连接到仅用于经过身份验证的用户的 Web 服务。这是最简单的例子: 我的网络服务代码:
public class TestService : System.Web.Services.WebService
[WebMethod(EnableSession = true)]
public string WelcomeMsg()
return "Hello: " + Session["UserName"] + "! Welcome to our store.";
[WebMethod(EnableSession = true)]
public void SetUserName(string sName)
Session["UserName"] = sName;
这是我在客户端应用程序上的代码(Windows 表单,而不是 Web 库):
private void btnSetName_Click(object sender, EventArgs e)
TestService.TestService ws = new TestService.TestService(); //Create a web service
MainForm.m_ccSessionInfo = new System.Net.CookieContainer(); //Create a CookieContainer
ws.CookieContainer = MainForm.m_ccSessionInfo; //Set CookieContainer of the web service
ws.SetUserName(txtUserName.Text); //Set value of session
ws = null;
private void btnWelcome_Click(object sender, EventArgs e)
TestService.TestService ws = new TestService.TestService(); //Create a web service
ws.CookieContainer = MainForm.m_ccSessionInfo; //Set CookieContainer back
string sWelcome = ws.WelcomeMsg(); //Get value from session property
ws = null;
System.Diagnostics.Debug.WriteLine(sWelcome);
在我的示例中 MainForm.m_ccSessionInfo 是一个静态成员,我想将会话 cookie 值保留在这个成员中! 但是,它不起作用:(。ws.WelcomeMsg() 总是返回一个空字符串。
【问题讨论】:
【参考方案1】:糟糕,我想我刚刚找到了解决这个问题的方法。 CookieContainer 由服务器创建,必须保存在客户端应用程序中。在 btnSetName_Click 上,我改变了
MainForm.m_ccSessionInfo = new System.Net.CookieContainer(); //Create a CookieContainer
ws.CookieContainer = MainForm.m_ccSessionInfo; //Set CookieContainer of the web service
进入
ws.CookieContainer = new System.Net.CookieContainer(); //Create a CookieContainer
MainForm.m_ccSessionInfo = ws.CookieContainer; //Keep CookieContainer for later using
现在效果很好!谢谢大家。
【讨论】:
是的!!!!我必须为 ASMX Web 服务维护一些遗留代码,这解决了我的问题!谢谢!【参考方案2】:下面试试
private void btnWelcome_Click(object sender, EventArgs e)
TestService.TestService ws = new TestService.TestService(); //Create a web service
ws.SetUserName(txtUserName.Text);
string sWelcome = ws.WelcomeMsg();
System.Diagnostics.Debug.WriteLine(sWelcome);
当调用 btnSetName_Click 方法和 btnWelcome_Click 单击 web 服务时,将您的 reqwests 视为新会话。
【讨论】:
"当调用 btnSetName_Click 方法和 btnWelcome_Click 单击 web 服务时,将您的 reqwests 视为新会话。"是的,这是我的问题,我想为客户端应用程序的所有活动保留会话。谢谢你的回复。 这不是解决问题的办法。以上是关于在调用 ASMX Web 服务时保持会话的主要内容,如果未能解决你的问题,请参考以下文章
为啥当android在java中调用第二次Web服务时会创建新的会话