更新時(shí)間:2020-09-23 17:36:18 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2117次
session和cookie是常用的會(huì)話技術(shù),在網(wǎng)站開發(fā)中得到了廣泛地運(yùn)用。Web Service作為一款能夠開發(fā)交互式應(yīng)用的前端程序,也會(huì)用到session和cookie。本文我們一起來學(xué)習(xí)在Web Service中使用session和cookie用法。
一、要在webservice中使用session,需要以下幾點(diǎn)要求:
1.在服務(wù)端的方法中加入[WebMethod(EnableSession=true)]修飾方法;
2.在客戶端,要在實(shí)例化了webservice代理類之后,要為它的CookieContainer 實(shí)例化一個(gè) new CookieContainer();
這樣才能使用session存儲(chǔ)狀態(tài)。
3.另外在多個(gè)webservice代理中,只要含有相同的cookie,就能共用相同的session,其中的cookie通過代理類的CookieContainer.GetCookies(new Uri(s.Url))["ASP.NET_SessionId"]取得,如果其他的webserivce代理類需要用相同的session則可以用CookieContainer.Add方法,將取得的cookie加入即可。
二、如果只想使用cookie,則只需要在客戶端做設(shè)置就可以,服務(wù)器端不需要像session一樣加入屬性修飾。
另外webmethod只用于public的成員方法,不用于static的,雖然不報(bào)錯(cuò),但在客戶端代理類中是找不到static方法的。
在使用asp.net編寫webservice時(shí),默認(rèn)情況下是不支持session的,但我們可以把WebMethod的EnableSession選項(xiàng)設(shè)為true來顯式的打開它,請(qǐng)看以下例子:
1 新建網(wǎng)站W(wǎng)ebSite
2 新建web服務(wù)WebService.asmx,它具有以下兩個(gè)方法:
[WebMethod(EnableSession = true)]
public string Login(string name)
{
Context.Session["name"] = name;
return name;
}
[WebMethod(EnableSession = true)]
public string GetName()
{
if (Context.Session["name"] != null)
return Context.Session["name"].ToString();
else
return "";
}
3 添加asp.net頁面SessionInWebservice.aspx
SessionInWebservice.aspx.cs
protected void btnLogin_Click(object sender, EventArgs e)
{
WebService ws = new WebService();
ws.Login(txtName.Text);
}
protected void btnGetName_Click(object sender, EventArgs e)
{
WebService ws = new WebService();
lblName.Text = ws.GetName();
}
問題似乎到此結(jié)束了,按Login按鈕記錄用戶名以后,再按GetName就可以獲取到剛才輸入的名字。
但如果我們另外新建一個(gè)website,并添加web引用來調(diào)用剛才編寫的Web Service,問題就出來了,GeName方法并沒有獲取到我們剛才登錄的用戶名(如果是在winform中調(diào)用該方法,也會(huì)出現(xiàn)同樣的問題)。莫非這個(gè)方法行不通了?
其實(shí)不然,我們給該WebService的CookieContainer賦值就可以了,修改SessionInWebservice.aspx.cs 的代碼:
private static System.Net.CookieContainer cookieContainer
= new System.Net.CookieContainer();
protected void btnLogin_Click(object sender, EventArgs e)
{
localhost.WebService ws = new localhost.WebService();
ws.CookieContainer = cookieContainer;
ws.Login(txtName.Text);
}
protected void btnGetName_Click(object sender, EventArgs e)
{
localhost.WebService ws = new localhost.WebService();
ws.CookieContainer = cookieContainer;
lblName.Text = ws.GetName();
}
請(qǐng)注意:Login方法和GetName方法必須指定同一個(gè)CookieContainer,因此在這里我們使用了靜態(tài)變量。
但如果是在不同的頁面中調(diào)用該Web Service,問題依舊存在,因此我們需要重新修改代碼,通過編寫新類繼承上面的Web Service,并給CookieContainer賦值就可以解決該問題了:
public class WebService1:localhost.WebService
{
private static System.Net.CookieContainer cookieContainer;
static WebService1()
{
cookieContainer = new System.Net.CookieContainer();
}
public WebService1()
{
this.CookieContainer = cookieContainer;
}
}
調(diào)用的時(shí)候也不需要重新給CookieContainer賦值了:
protected void btnLogin_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
ws.Login(txtName.Text);
}
protected void btnGetName_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
lblName.Text = ws.GetName();
}
相必通過以上的介紹,你一定對(duì)Web Service中session和cookie用法有所掌握和了解,當(dāng)然在實(shí)際使用時(shí)發(fā)現(xiàn)在如果調(diào)用Web Service的兩個(gè)頁面是在同一個(gè)網(wǎng)站里可以,如果分別是2個(gè)不同網(wǎng)站的頁面就還是不能使用同一個(gè)session。想學(xué)習(xí)更多的前端頁面知識(shí),可以觀看本站java教程,學(xué)習(xí)更多的優(yōu)質(zhì)內(nèi)容。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)