簡體   English   中英

在調用ASMX Web服務時維護會話

[英]Maintain Session While Calling an ASMX Web Service

我正在使用客戶端應用程序僅為經過身份驗證的用戶連接到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()總是返回一個空字符串。

哎呀,我想我剛剛找到了這個問題的解決方案。 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

它現在運作良好! 謝謝大家。

試試下面

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單擊網絡服務時,請將您的需求視為新會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM