Atlas Framework中包含了對AJAX調用的封裝讓您可以很方便的在客戶端通過JavaScript調用服務器端方法在本篇文章中我將解釋一下如何使用Atlas調用服務器端Web Service
使用Atlas我們只需要如下步驟即可調用服務器端Web Service
在Web Service的方法上加上[WebMethod]屬性
在ASPX頁面上的ScriptManager中添加對這個Web Service的引用
只需以上兩步Atlas會在運行時為您生成相應的mash up讓您可在客戶端JavaScript中通過WebServiceClassNameServiceMethodName()調用該方法
讓我們先來看一個最簡單的例子調用服務器端Web Service得到兩個數的和
首先建立一個Web ServiceSimpleWebServiceasmx並在其中添加一個Service Method不要忘記標記為[WebMethod]哦
[WebMethod]
public int AddInt(int int
int int
)
{
return int
+ int
;
}
然後再ASPX頁面上的ScriptManager中添加對該Web Service的引用
<atlas:ScriptManager ID=
ScriptManager
runat=
server
>
<Services>
<atlas:ServiceReference Path=
SimpleWebService
asmx
/>
</Services>
</atlas:ScriptManager>
添加點HTML Code
讓用戶輸入兩個整數
Pass simple type to web service
add the two integers:<br />
<input id=
int
type=
text
value=
size=
/>+
<input id=
int
type=
text
value=
size=
/>=
<input id=
btnAddInt
type=
button
value=
?
onclick=
return btnAddInt_onclick()
/><br />
<br />
再書寫一點JavaScript當用戶點擊上面的按鈕時調用Web Method這裡要注意的是JavaScript中調用Web Method的格式前面兩個參數intint分別對應著Web Service聲明中的兩個參數後面一個參數onAddIntComplete表示方法成功返回時的Callback方法也就是所謂AJAX中的A同時需要注意的是$()方法等同於documentgetElementById()
function btnAddInt_onclick()
{
var int
= $(
int
)
value;
var int
= $(
int
)
value;
SimpleWebService
AddInt(int
int
onAddIntComplete);
}
function onAddIntComplete(result)
{
$(
btnAddInt
)
value = result;
}
上面的例子僅僅傳遞簡單類型然而在現實世界中我們經常會需要傳遞一些復雜的類型讓我們看一個傳遞復雜類型的例子
本例子同樣是一個加法不過這回操作的類型是復數讓我們先來看看C#中我們的復數的定義(作為示例這裡盡可能的簡化)注意我們應該提供自定義的復雜類型一個無參的構造函數以便於Atlas自動在C#類型和JavaScript類型中轉換
public class ComplexNumber
{
private int real;
public int Real
{
get
{ return real; }
set
{ real = value; }
}
private int imag;
public int Imag
{
get
{ return imag; }
set
{ imag = value; }
}
public ComplexNumber(int real
int imag)
{
this
real = real;
this
imag = imag;
}
public ComplexNumber()
{
}
}
然後是實現復數加法的Web Method寫在同一個Web Service中
[WebMethod]
public ComplexNumber AddComplexNumber(ComplexNumber num
ComplexNumber num
)
{
return new ComplexNumber(num
Real + num
Real
num
Imag + num
Imag);
}
相應的ASPX頁面中也要添加一些HTML
讓用戶輸入兩個復數
Pass complex type to web service
add the two complex numbers:<br />
(<input id=
cplx
r
type=
text
value=
size=
/>+
<input id=
cplx
i
type=
text
value=
size=
/>i) + (
<input id=
cplx
r
type=
text
value=
size=
/>+
<input id=
cplx
i
type=
text
value=
size=
/>i) =
<input id=
btnAddComplex
type=
button
value=
?
onclick=
return btnAddComplex_onclick()
/>
<br />
然後是相應的JavaScript當用戶點擊上面的按鈕時執行這段JavaScript以調用Web Method
function btnAddComplex_onclick()
{
var cplx
=
{Real: $(
cplx
r
)
value
Imag: $(
cplx
i
)
value};
var cplx
=
{Real: $(
cplx
r
)
value
Imag: $(
cplx
i
)
value};
SimpleWebService
AddComplexNumber(cplx
cplx
onAddComplextNumberComplete);
}
function onAddComplextNumberComplete(result)
{
$(
btnAddComplex
)
value = result
Real
toString() +
+
+ result
Imag
toString() +
i
;
}
浏覽器中運行一下初始化
點擊第一個問號調用AddInt () Web Method計算+得到
點擊第二個問號調用AddComplexNumber () Web Method計算(+i) + (+i)得到+i
源代碼可以在此下載
通過以上兩個示例您已經了解了如何與服務器端Web Service進行復雜通信但實際開發中往往還需要進行一些其它的處理例如對服務器的錯誤信息的處理對超時的處理對用戶取消操作的處理等等Atlas同樣提供了對以上需求的內建的支持在後續文章中我將全面介紹Atlas對Web Service的mash up中對上述復雜情況的處理
From:http://tw.wingwit.com/Article/program/net/201311/12741.html