熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在asp.net webservice中如何使用session

2013-11-13 10:22:31  來源: .NET編程 

  在使用編寫webservice時默認情況下是不支持session的但我們可以把WebMethod的EnableSession選項設為true來顯式的打開它請看以下例子

   新建網站WebSite 

   新建web服務WebServiceasmx它具有以下兩個方法

  C#Code:

  [WebMethod(EnableSession = true)]

  public string Login(string name)

  {

  ContextSession[name] = name;

  return name;

  }  

   

  [WebMethod(EnableSession = true)]

  public string GetName()

  {

  if (ContextSession[name] != null)

  return ContextSession[name]ToString();

  else

  return ;

  }

   添加頁面SessionInWebserviceaspx

  ASPNETCode:

  <form id=form runat=server>

  <div>

  <asp:TextBox ID=txtName runat=server></asp:TextBox>

  <asp:Button ID=btnLogin runat=server

  Text=Login OnClick=btnLogin_Click />

  </div>

  <div>

  <asp:Button ID=btnGetName runat=server

  Text=GetName OnClick=btnGetName_Click />

  <asp:Label ID=lblName runat=server Text=Label></asp:Label>

  </div>

  </form>

  SessionInWebserviceaspxcs

  C#Code:

  protected void btnLogin_Click(object sender EventArgs e)

  {

  WebService ws = new WebService();   

  wsLogin(txtNameText);

  }

  protected void btnGetName_Click(object sender EventArgs e)

  {

  WebService ws = new WebService();

  lblNameText = wsGetName();

  }

  問題似乎到此結束了按Login按鈕記錄用戶名以後再按GetName就可以獲取到剛才輸入的名字

  但如果我們另外新建一個website並添加web引用來調用剛才編寫的webservice問題就出來了GeName方法並沒有獲取到我們剛才登錄的用戶名(如果是在winform中調用該方法也會出現同樣的問題)莫非這個方法行不通了?

  其實不然我們給該WebService的CookieContainer賦值就可以了修改SessionInWebserviceaspxcs 的代碼

  C#Code:

  private static SystemNetCookieContainer cookieContainer

  = new SystemNetCookieContainer();  

  protected void btnLogin_Click(object sender EventArgs e)

  {

  localhostWebService ws = new localhostWebService();

  wsCookieContainer = cookieContainer;

  wsLogin(txtNameText);

  }

  protected void btnGetName_Click(object sender EventArgs e)

  {

  localhostWebService ws = new localhostWebService();

  wsCookieContainer = cookieContainer;

  lblNameText = wsGetName();

  }

  請注意Login方法和GetName方法必須指定同一個CookieContainer因此在這裡我們使用了靜態變量

  但如果是在不同的頁面中調用該webservice問題依舊存在因此我們需要重新修改代碼通過編寫新類繼承上面的webservice並給CookieContainer賦值就可以解決該問題了 

  C#Code:

  public class WebService:localhostWebService

  {

  private static SystemNetCookieContainer cookieContainer; 

  static WebService()

  {

  cookieContainer = new SystemNetCookieContainer();

  } 

  public WebService()

  {

  thisCookieContainer = cookieContainer;

  }

  }

  調用的時候也不需要重新給CookieContainer賦值了

  C#Code:

  protected void btnLogin_Click(object sender EventArgs e)

  {

  WebService ws = new WebService();

  wsLogin(txtNameText);

  }

  protected void btnGetName_Click(object sender EventArgs e)

  {

  WebService ws = new WebService();

  lblNameText = wsGetName();

  }

   


From:http://tw.wingwit.com/Article/program/net/201311/13423.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.