c# - 在调用 ASMX Web 服务时保持 session

标签 c# web-services asmx session-state session-cookies

我正在使用客户端应用程序连接到仅供经过身份验证的用户使用的 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 是一个静态成员,我想在这个中保留 session cookies 值!
但是,它不起作用 :( 。ws.WelcomeMsg() 总是返回一个空字符串。

最佳答案

糟糕,我想我刚刚找到了这个问题的解决方案。 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

现在效果很好!谢谢大家。

关于c# - 在调用 ASMX Web 服务时保持 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961801/

相关文章:

c# - 与无限循环异步

c# - 我如何创建 UserManager 的实例

c# - 如何让 Elmah 与 UnobservedTaskException 一起工作

java - sun-jaxws.xml 中的 JAX-WS 多端点

c# - 从 ASMX Web 服务捕获自定义异常

asp.net - 定义 ASP.NET SOAP Web 服务响应

jquery - 通过ajax调用asp.net asmx webservice返回401 Unauthorized错误

c# - 如何在 C# 中修复 "Clone.Bitmap"系统内存不足

c# - 调用asmx webservice时如何为base64Binary发送数据

现有应用程序中的 Java Web 服务集成