2011-11-01 32 views
6

Sadece kimliği doğrulanmış kullanıcılar için bir web servisine bağlanmak için bir istemci uygulaması kullanıyorum. İşte en basit örneğidir:
Benim web hizmeti kod :Bir ASMX Web Hizmeti Çağrılırken Oturumu Gerçekleştirin

İşte
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; 
    } 
} 

istemci uygulaması üzerinde benim kod (Windows formu, web değil taban) olduğu:

Benim örnekte
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 bir olduğunu statik üye, bu oturumda oturum çerez değeri tutmak istiyorum!
Ancak. Ws.WelcomeMsg() her zaman boş bir dize döndürür edilir :(çalışmaz.

cevap

8

Oops,. CookieContainer sunucu tarafından oluşturulur ve istemci uygulaması olarak tutulmalıdır. sadece bu sorun için bir çözüm buldum btnSetName_Click günü,

değiştirmek 10

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

içine Ve şimdi iyi çalışıyor! Hepinize teşekkürler.

+0

YESSSSSS !!!! Bir ASMX web servisi için bazı eski kodları korumak zorundayım ve bu benim problemimi çözdü! Teşekkür ederim! –

1

deneyin

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 yöntemi ve btnWelcome_Click tıklama ağları ervice sizin reqwests dikkate arayarak aşağıda yeni oturum olarak.

+0

"btnSetName_Click yöntemini ve btnWelcome_Click webs hizmetlerini çağırdığınızda, reqwest'lerinizi yeni oturumlar olarak düşünün." Evet, bu benim sorunum, oturumu tüm istemci uygulaması etkinliklerinde tutmak istiyorum. Cevabınız için teşekkür ederim. – huynhtuanh

İlgili konular