WebService的web客戶端同步、異步、多線程向服務端傳入參數的數據交互方式

接着上一章的內容,在上一章中咱們知道了如何.net平臺下去創建一個WebService,以及同步調用、異步調用、開線程異步調用三種客戶端從服務端獲取數據的方式,在本章了所要講的,是如何將客戶端的數據,傳遞給服務端,進行客戶端和服務端的雙相交互

服務端

創建UserManager.cs類,添加using System.Web.Services.Protocols;命名空間,並使它繼承自SoapHeader
輸入如下代碼
  1.  
    public class UserManager: SoapHeader
  2.  
    {
  3.  
    public string Name { get; set; }
  4.  
    public string Pwd { get; set; }
  5.  
     
  6.  
     
  7.  
    private bool CheckUser(string n,string p)
  8.  
    {
  9.  
    if(Name == "aaa" && Pwd == "bbb")
  10.  
    {
  11.  
    return true;
  12.  
    }
  13.  
    else
  14.  
    {
  15.  
    return false;
  16.  
    }
  17.  
    }
  18.  
     
  19.  
     
  20.  
    public bool CheckUser()
  21.  
    {
  22.  
    return CheckUser(Name, Pwd);
  23.  
    }
  24.  
    }
在服務端的WSDemo.asmx文件中輸入如下代碼
  1.  
    public class WSDemo : System. Web. Services. WebService
  2.  
    {
  3.  
     
  4.  
     
  5.  
    [ WebMethod]
  6.  
    public string HelloWorld()
  7.  
    {
  8.  
    return "Hello World";
  9.  
    }
  10.  
     
  11.  
     
  12.  
    //標準一下CheckUser()方法使用哪一個SoapHeader進行校驗,客戶端網站調用該方法時須要指定本身定義的SoapHeader內容
  13.  
    //這樣,雖然CheckUser()並無參數,但在在使用時,要先定義UserManager的SoapHeader的頭,放在CheckUser中
  14.  
    public UserManager um;
  15.  
    [ SoapHeader("um")]
  16.  
    [ WebMethod(Description = "用戶驗證")]
  17.  
    public bool CheckUser()
  18.  
    {
  19.  
    if (um.CheckUser())
  20.  
    {
  21.  
    return true;
  22.  
    }
  23.  
    else
  24.  
    {
  25.  
    return false;
  26.  
    }
  27.  
    }
  28.  
    }
至此,服務端操做完畢

客戶端---同步方式

操做完服務端後,要在ServiceReference1上右擊「更新服務引用」html

圖10
在Index.aspx.cs中輸入如下代碼:
  1.  
    public partial class Index : System. Web. UI. Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
  7.  
    {
  8.  
    //UserManager服務端中的類名
  9.  
    ServiceReference1.UserManager um = new UserManager();
  10.  
    um.Name = "aaa";
  11.  
    um.Pwd = "bbb";
  12.  
    stator = wsc.CheckUser(um)? "登陸成功": "用戶名或密碼錯誤"; //三目運算符,更據服務端返回值肯定向瀏覽器輸出內容
  13.  
    }
  14.  
    Response.Write(stator);
  15.  
    }
  16.  
    }
至此,客戶端操做完畢,此時可發如今用戶名和密碼不對的狀況下,瀏覽器所輸入的值

客戶端---異步方式

將Index.aspx.cs中的代碼修改成如下方式
  1.  
    public partial class Index : System. Web. UI. Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
  7.  
    {
  8.  
    //要執行的方法
  9.  
    client.CheckUserCompleted += new EventHandler<CheckUserCompletedEventArgs>(client_CheckUserCompleted);
  10.  
    //爲傳參作準備,由於添加了「服務引用」因此在客戶端也能點出服務端中公佈的的方法來
  11.  
    ServiceReference1.UserManager um = new UserManager();
  12.  
    um.Name = "aaa";
  13.  
    um.Pwd = "bbb";
  14.  
    //開始執行
  15.  
    client.CheckUserAsync(um);
  16.  
    }
  17.  
    }
  18.  
    //要執行的方法
  19.  
    void client_CheckUserCompleted(object sender, CheckUserCompletedEventArgs e)
  20.  
    {
  21.  
    stator = e.Result ? "登陸成功" : "登陸失敗";
  22.  
    Response.Write(stator);
  23.  
    }
  24.  
    }

客戶端---開線程的異步方式

將Index.aspx.cs中代碼更改成如下形式
  1.  
    public partial class Index : System. Web. UI. Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    BackgroundWorker bw = new BackgroundWorker();
  7.  
    bw.DoWork += new DoWorkEventHandler(bw_DoWork); //指明線程要執行方法
  8.  
    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); //獲取從服務端中的返回值
  9.  
    bw.RunWorkerAsync(); //開始執行
  10.  
    }
  11.  
    //獲取從服務端中的返回值
  12.  
    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  13.  
    {
  14.  
    stator = ( bool)e.Result ? "登陸成功" : "登陸失敗";
  15.  
    Response.Write(stator);
  16.  
    }
  17.  
    //指明線程要執行方法
  18.  
    void bw_DoWork(object sender, DoWorkEventArgs e)
  19.  
    {
  20.  
    //創建客戶端和服務端的連接
  21.  
    using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
  22.  
    {
  23.  
    //對服務端公佈方法UserManager進行實例化並賦值
  24.  
    UserManager um = new UserManager();
  25.  
    um.Name = "aaa";
  26.  
    um.Pwd = "bbb";
  27.  
    //調用服務端方法,並傳入參數
  28.  
    e.Result = client.CheckUser(um); //注意e.Result = ...
  29.  
    }
  30.  
    }
  31.  
    }
至此,開線程異步客戶端傳參與服務器數據交互操做完畢

 

出處:https://blog.csdn.net/zhangquanok/article/details/15338697瀏覽器

相關文章
相關標籤/搜索