2011-11-01 30 views
6

クライアントアプリケーションを使用して、認証されたユーザーのみの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がAでスタティックメンバー、このセッションクッキーの値を保持したい!
しかし、それは:(動作しません。ws.WelcomeMsg()は空の文字列を返す常にある。

呼び出しbtnSetName_Click方法とbtnWelcome_Clickクリックウェブerviceがあなたのreqwestsを検討
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); 
} 

以下

答えて

8

おっと、私は。CookieContainerがサーバーによって作成され、クライアントアプリケーションに保たれなければならない。私はこの問題の解決策を見つけたと思うbtnSetName_Clickで、私は

を変更します

ws.CookieContainer = new System.Net.CookieContainer(); //Create a CookieContainer 
MainForm.m_ccSessionInfo = ws.CookieContainer; //Keep CookieContainer for later using 

に10

そして、それは今、うまく機能!みなさんありがとう。

+0

YESSSSSS !!!!私はASMX Webサービスのいくつかのレガシーコードを維持する必要があり、これが私の問題を解決しました!ありがとうございました! –

1

試してみます新しいセッションとして。

+0

"btnSetName_Clickメソッドを呼び出してbtnWelcome_Clickをクリックすると、websviceがあなたのreqwestを新しいセッションとして認識します。"はい、それは私の問題です、私はクライアントアプリケーションのすべての活動のためのセッションを維持したいです。返信してくれてありがとう。 – huynhtuanh

関連する問題