接着上一章的內容,在上一章中我們知道了如何.net平台下去建立一個WebService,以及同步調用、異步調用、開線程異步調用三種客戶端從服務端獲取數據的方式,在本章了所要講的,是如何將客戶端的數據,傳遞給服務端,進行客戶端和服務端的雙相交互
輸入以下代碼
在Index.aspx.cs中輸入以下代碼:
服務端
建立UserManager.cs類,添加using System.Web.Services.Protocols;命名空間,並使它繼承自SoapHeader輸入以下代碼
-
public class UserManager: SoapHeader
-
{
-
public string Name { get; set; }
-
public string Pwd { get; set; }
-
-
-
private bool CheckUser(string n,string p)
-
{
-
if(Name == "aaa" && Pwd == "bbb")
-
{
-
return true;
-
}
-
else
-
{
-
return false;
-
}
-
}
-
-
-
public bool CheckUser()
-
{
-
return CheckUser(Name, Pwd);
-
}
-
}
-
public class WSDemo : System. Web. Services. WebService
-
{
-
-
-
[]
-
public string HelloWorld()
-
{
-
return "Hello World";
-
}
-
-
-
//標准一下CheckUser()方法使用哪個SoapHeader進行校驗,客戶端網站調用該方法時需要指定自己定義的SoapHeader內容
-
//這樣,雖然CheckUser()並沒有參數,但在在使用時,要先定義UserManager的SoapHeader的頭,放在CheckUser中
-
public UserManager um;
-
[]
-
[]
-
public bool CheckUser()
-
{
-
if (um.CheckUser())
-
{
-
return true;
-
}
-
else
-
{
-
return false;
-
}
-
}
-
}
客戶端---同步方式
操作完服務端后,要在ServiceReference1上右擊“更新服務引用”
在Index.aspx.cs中輸入以下代碼:
-
public partial class Index : System. Web. UI. Page
-
{
-
protected string stator = string.Empty;
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
-
{
-
//UserManager服務端中的類名
-
ServiceReference1.UserManager um = new UserManager();
-
um.Name = "aaa";
-
um.Pwd = "bbb";
-
stator = wsc.CheckUser(um)? "登錄成功": "用戶名或密碼錯誤"; //三目運算符,更據服務端返回值確定向瀏覽器輸出內容
-
}
-
Response.Write(stator);
-
}
-
}
客戶端---異步方式
將Index.aspx.cs中的代碼修改為以下方式-
public partial class Index : System. Web. UI. Page
-
{
-
protected string stator = string.Empty;
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
-
{
-
//要執行的方法
-
client.CheckUserCompleted += new EventHandler<CheckUserCompletedEventArgs>(client_CheckUserCompleted);
-
//為傳參做准備,因為添加了“服務引用”所以在客戶端也能點出服務端中公布的的方法來
-
ServiceReference1.UserManager um = new UserManager();
-
um.Name = "aaa";
-
um.Pwd = "bbb";
-
//開始執行
-
client.CheckUserAsync(um);
-
}
-
}
-
//要執行的方法
-
void client_CheckUserCompleted(object sender, CheckUserCompletedEventArgs e)
-
{
-
stator = e.Result ? "登錄成功" : "登錄失敗";
-
Response.Write(stator);
-
}
-
}
客戶端---開線程的異步方式
將Index.aspx.cs中代碼更改為以下形式-
public partial class Index : System. Web. UI. Page
-
{
-
protected string stator = string.Empty;
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
BackgroundWorker bw = new BackgroundWorker();
-
bw.DoWork += new DoWorkEventHandler(bw_DoWork); //指明線程要執行方法
-
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); //獲取從服務端中的返回值
-
bw.RunWorkerAsync(); //開始執行
-
}
-
//獲取從服務端中的返回值
-
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
-
{
-
stator = ( bool)e.Result ? "登錄成功" : "登錄失敗";
-
Response.Write(stator);
-
}
-
//指明線程要執行方法
-
void bw_DoWork(object sender, DoWorkEventArgs e)
-
{
-
//建立客戶端和服務端的鏈接
-
using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
-
{
-
//對服務端公布方法UserManager進行實例化並賦值
-
UserManager um = new UserManager();
-
um.Name = "aaa";
-
um.Pwd = "bbb";
-
//調用服務端方法,並傳入參數
-
e.Result = client.CheckUser(um); //注意e.Result = ...
-
}
-
}
-
}
出處:https://blog.csdn.net/zhangquanok/article/details/15338697