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]
publicintAddInt(intintintint)
{
returnint+int;
}
然后再ASPX页面上的ScriptManager中添加对该Web Service的引用
<atlas:ScriptManagerID=ScriptManagerrunat=server>
<Services>
<atlas:ServiceReferencePath=SimpleWebServiceasmx/>
</Services>
</atlas:ScriptManager>添加点HTML Code让用户输入两个整数
Passsimpletypetowebserviceaddthetwointegers:<br/>
<inputid=inttype=textvalue=size=/>+
<inputid=inttype=textvalue=size=/>=
<inputid=btnAddInttype=buttonvalue=?onclick=returnbtnAddInt_onclick()/><br/>
<br/>
再书写一点JavaScript当用户点击上面的按钮时调用Web Method这里要注意的是JavaScript中调用Web Method的格式前面两个参数intint分别对应着Web Service声明中的两个参数后面一个参数onAddIntComplete表示方法成功返回时的Callback方法也就是所谓AJAX中的A同时需要注意的是$()方法等同于documentgetElementById()
functionbtnAddInt_onclick(){
varint=$(int)value;
varint=$(int)value;
SimpleWebServiceAddInt(intintonAddIntComplete);
}
functiononAddIntComplete(result){
$(btnAddInt)value=result;
}
上面的例子仅仅传递简单类型然而在现实世界中我们经常会需要传递一些复杂的类型让我们看一个传递复杂类型的例子
本例子同样是一个加法不过这回操作的类型是复数让我们先来看看C#中我们的复数的定义(作为示例这里尽可能的简化)注意我们应该提供自定义的复杂类型一个无参的构造函数以便于Atlas自动在C#类型和JavaScript类型中转换
publicclassComplexNumber
{
privateintreal;
publicintReal
{
get{returnreal;}
set{real=value;}
}
privateintimag;
publicintImag
{
get{returnimag;}
set{imag=value;}
}
publicComplexNumber(intrealintimag)
{
thisreal=real;
thisimag=imag;
}
publicComplexNumber()
{
}
}
然后是实现复数加法的Web Method写在同一个Web Service中
[WebMethod]
publicComplexNumberAddComplexNumber(ComplexNumbernumComplexNumbernum)
{
returnnewComplexNumber(numReal+numRealnumImag+numImag);
}相应的ASPX页面中也要添加一些HTML让用户输入两个复数
Passcomplextypetowebserviceaddthetwocomplexnumbers:<br/>
(<inputid=cplxrtype=textvalue=size=/>+
<inputid=cplxitype=textvalue=size=/>i)+(
<inputid=cplxrtype=textvalue=size=/>+
<inputid=cplxitype=textvalue=size=/>i)=
<inputid=btnAddComplextype=buttonvalue=?onclick=returnbtnAddComplex_onclick()/>
<br/>
然后是相应的JavaScript当用户点击上面的按钮时执行这段JavaScript以调用Web Method
functionbtnAddComplex_onclick(){
varcplx={Real:$(cplxr)valueImag:$(cplxi)value};
varcplx={Real:$(cplxr)valueImag:$(cplxi)value};
SimpleWebServiceAddComplexNumber(cplxcplxonAddComplextNumberComplete);
}
functiononAddComplextNumberComplete(result){
$(btnAddComplex)value=resultRealtoString()+++resultImagtoString()+i;
}
浏览器中运行一下初始化
点击第一个问号调用AddInt () Web Method计算+得到
点击第二个问号调用AddComplexNumber () Web Method计算(+i) + (+i)得到+i
源代码可以在此下载
通过以上两个示例您已经了解了如何与服务器端Web Service进行复杂通信但实际开发中往往还需要进行一些其它的处理例如对服务器的错误信息的处理对超时的处理对用户取消操作的处理等等Atlas同样提供了对以上需求的内建的支持在后续文章中我将全面介绍Atlas对Web Service的mash up中对上述复杂情况的处理