C# 在调用ASMX Web服务时维护会话

C# 在调用ASMX Web服务时维护会话,c#,web-services,asmx,session-state,session-cookies,C#,Web Services,Asmx,Session State,Session Cookies,我正在使用客户端应用程序连接到web服务,仅限经过身份验证的用户。下面是最简单的例子: 我的web服务代码: public class TestService : System.Web.Services.WebService { [WebMethod(EnableSession = true)] public string WelcomeMsg() { return "Hello: " + Session["UserName"] + "! Welcome

我正在使用客户端应用程序连接到web服务,仅限经过身份验证的用户。下面是最简单的例子:
我的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 base):

在我的示例中,MainForm.m_ccSessionInfo是一个静态成员,我希望将会话cookies值保留在这个成员中
但是,它不起作用:(.ws.WelcomeMsg()总是返回一个空字符串。

请尝试下面的方法

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); 
}

当调用BTNStEngEnEnEngultCype方法和BTNWelCuEy点击点击WebService时,将您的ReqWests视为新的会话。

OOPS,我想我刚刚找到了这个问题的解决方案。CookieContainer是由服务器创建的,必须保存在客户端应用程序上。

MainForm.m_ccSessionInfo = new System.Net.CookieContainer(); //Create a CookieContainer
ws.CookieContainer = MainForm.m_ccSessionInfo; //Set CookieContainer of the web service
进入


现在效果不错!谢谢大家。

当调用BTNStEngEnEngEnter方法和BTNWelCeMe~点击单击WebService时,将您的ReqWests视为新的会话。是的,这是我的问题,我想保留客户端应用程序所有活动的会话。感谢您的回复。这不是问题的解决方案。是的!我必须为ASMX web服务维护一些旧代码,这解决了我的问题!谢谢!
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