古詩詞大全網 - 成語查詢 - .net中webservice是同步調用還是異步調用

.net中webservice是同步調用還是異步調用

WebService

其實異步調用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>