2011-11-01 58 views
6

我正在使用客戶端應用程序連接到僅用於已驗證用戶的Web服務。這是最簡單的例子:
我的web服務代碼:在調用ASMX 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形式,而不是網絡基礎):

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()總是返回一個空字符串。

回答

8

新的會話。哎呀,我想我只是發現這個問題的解決方案。該的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 

而且現在工作得很好!謝謝大家。

+0

YESSSSSS !!!!我必須爲ASMX Web服務維護一些遺留代碼,這解決了我的問題!謝謝! –

1

試試下面

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點擊網ervice考慮您的reqwests作爲

+0

「當調用btnSetName_Click方法和btnWelcome_Click時,請單擊webs服務將您的請求視爲新會話。」是的,那是我的問題,我想保留客戶端應用程序的所有活動的會話。感謝您的答覆。 – huynhtuanh