其實異步調用WebService是不需要在WebService中做任何操作的,只是普通的WebService就可以了,下面是我寫的壹個簡單的WebService返回SqlServer2000中NorthWind數據庫中所有員工的信息
[WebMethod]
public DLL.EmployeesDataTable getEmployee()
{
DLL.EmployeesDataTable result = new DLL.EmployeesDataTable();
DLLTableAdapters.EmployeesTableAdapter eta = new WebServiceAsyn.DLLTableAdapters.EmployeesTableAdapter();
eta.FillEmployee(result);
return result;
} 這裏我需要聲明壹下,返回的 DLL.EmployeesDataTable類型是我用DataSet生成的強類型,或者妳可以認為他是DataTable。
如何在Asp.Net裏引入WebService呢?首先右鍵單擊解決方案資源管理器中的項目,然後選擇添加Web引用(妳也可以單擊網站菜單選擇添加Web引用),在彈出的對話框中填入WebService的地址,並填寫Web引用名後點擊添加引用按鈕就可以了,這時我們就可以在代碼視圖中根據web引用名來對WebService進行調用了,下面是我的CS代碼
//實體化WebService引用
private AsynWebService.Service1 asynSer;
//構造函數初始化WebService引用,並為異步調用WebService設置好了結果處理函數方法名Completed(先這麽叫吧,我也不知道怎麽叫)
public _Default()
{
asynSer = new AsynWebService.Service1();
asynSer.HelloWorldCompleted += new AsynWebService.HelloWorldCompletedEventHandler(asynSer_HelloWorldCompleted);
asynSer.getEmployeeCompleted += new AsynWebService.getEmployeeCompletedEventHandler(asynSer_getEmployeeCompleted);
}
protected void Button1_Click(object sender, EventArgs e)
{
//開始異步調用HelloWorld;
asynSer.HelloWorldAsync();
}
protected void asynSer_HelloWorldCompleted(object sender, AsynWebService.HelloWorldCompletedEventArgs e)
{
this.Label1.Text = e.Result.ToString();
}
protected void asynSer_getEmployeeCompleted(object sender, AsynWebService.getEmployeeCompletedEventArgs e)
{
this.GridView1.DataSource = e.Result;
this.GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
//開始異步調用getEmployee
asynSer.getEmployeeAsync();
} 到這裏我們後臺代碼就寫完了,但是我們還要在ASPX頁面設置壹個允許異步調用的屬性 Async="true"這樣就可以在這個頁面裏進行異步調用了!
同步調用的方法和異步調用的方法不壹樣,異步調用的方法是WebServic的方法名+Async()作為方法名,同步調用的方法就是WebService的方法名。
其實從原理上看不管是Ajax還是Asp.Net或者Flex它們的異步調用都是壹樣的,下面我們來和Ajax比較壹下Ajax中的核心對象--XMLHttpRequest對象壹個非常重要的屬性就是onreadystatechange,下面是壹個基於Ajax的簡單的用戶名的驗證<script language="javascript" type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function requestStart()
{
if(document.getElementById("tbx1").value.length <= 4)
{
alert("用戶名的長度要求大於4個字符!");
return false;
}
document.getElementById("sp1").innerText = "Loding";
var url = "default.aspx?userName=" + document.getElementById("tbx1").value;
createXMLHttpRequest();//創建XMLHttpRequest對象
xmlHttp.onreadystatechange = callBack;//為XMLHttpRequest對象指定結果處理函數
xmlHttp.open("GET",url);//打開鏈接
xmlHttp.send(null);//發送請求
}
//結果處理函數
function callBack()
{
if(xmlHttp.readyState == 4)
{
document.getElementById("sp1").innerText = xmlHttp.responseText;
}
}
</script>