在ASP.NET Atlas中调用Web Service——介绍及简单应用

Atlas Framework中包含了对AJAX调用的封装,让您可以很方便的在客户端通过JavaScript调用服务器端方法。在本篇文章中,我将解释一下如何使用Atlas调用服务器端Web Service。

使用Atlas,我们只需要如下步骤即可调用服务器端Web Service:

  1. Web Service的方法上加上[WebMethod]属性。
  2. 在ASPX页面上的ScriptManager中添加对这个Web Service的引用。

只需以上两步,Atlas会在运行时为您生成相应的mash up,让您可在客户端JavaScript中通过WebServiceClassName.ServiceMethodName()调用该方法。

让我们先来看一个最简单的例子,调用服务器端Web Service得到两个数的和:

首先建立一个Web Service:SimpleWebService.asmx,并在其中添加一个Service Method,不要忘记标记为[WebMethod]哦:
  1. [WebMethod]   
  2.  public int AddInt(int int1, int int2)   
  3.  {   
  4.  return int1 + int2;   
  5.  }  

然后再ASPX页面上的ScriptManager中添加对该Web Service的引用:
  1. <atlas:ScriptManager ID="ScriptManager1" runat="server">  
  2.  <Services>  
  3.  <atlas:ServiceReference Path="SimpleWebService.asmx" />  
  4.  </Services>  
  5.  </atlas:ScriptManager>  

添加点HTML Code,让用户输入两个整数
  1. Pass simple type to web service - add the two integers:
  2.  
  3.  <input id="int1" type="text" value="1" size="3" />+
  4.  <input id="int2" type="text" value="2" size="3" />=
  5.  <input id="btnAddInt" type="button" value="?" onclick="return btnAddInt_onclick()" />

再书写一点JavaScript,当用户点击上面的按钮时,调用Web Method。这里要注意的是JavaScript中调用Web Method的格式:前面两个参数int1int2分别对应着Web Service声明中的两个参数,后面一个参数onAddIntComplete表示方法成功返回时的Callback方法,也就是所谓AJAX中的A。同时需要注意的是$()方法,等同于document.getElementById()
  1. function btnAddInt_onclick() {
  2.  var int1 = $('int1').value;
  3.  var int2 = $('int2').value;
  4.  SimpleWebService.AddInt(int1, int2, onAddIntComplete);
  5.  }
  6.  function onAddIntComplete(result) {
  7.  $('btnAddInt').value = result;
  8.  }

上面的例子仅仅传递简单类型,然而在现实世界中,我们经常会需要传递一些复杂的类型,让我们看一个传递复杂类型的例子:

本例子同样是一个加法,不过这回操作的类型是复数。让我们先来看看C#中我们的复数的定义(作为示例,这里尽可能的简化)。注意我们应该提供自定义的复杂类型一个无参的构造函数,以便于Atlas自动在C#类型和JavaScript类型中转换:

  1. public class ComplexNumber   
  2.  {   
  3.  private int real;   
  4.     
  5.  public int Real   
  6.  {   
  7.  get { return real; }   
  8.  set { real = value; }   
  9.  }   
  10.  private int imag;   
  11.     
  12.  public int Imag   
  13.  {   
  14.  get { return imag; }   
  15.  set { imag = value; }   
  16.  }   
  17.  public ComplexNumber(int real, int imag)   
  18.  {   
  19.  this.real = real;   
  20.  this.imag = imag;   
  21.  }   
  22.  public ComplexNumber()   
  23.  {   
  24.  }   
  25.  }  

然后是实现复数加法的Web Method,写在同一个Web Service中:
  1. [WebMethod]   
  2.  public ComplexNumber AddComplexNumber(ComplexNumber num1, ComplexNumber num2)   
  3.  {   
  4.  return new ComplexNumber(num1.Real + num2.Real, num1.Imag + num2.Imag);   
  5.  }  

相应的ASPX页面中也要添加一些HTML,让用户输入两个复数:
  1. Pass complex type to web service - add the two complex numbers:
  2.  
  3. (<input id="cplx1r" type="text" value="1" size="3" />+
  4.  <input id="cplx1i" type="text" value="2" size="3" />i) + (
  5.  <input id="cplx2r" type="text" value="3" size="3" />+
  6.  <input id="cplx2i" type="text" value="4" size="3" />i) = 
  7.  <input id="btnAddComplex" type="button" value="?" onclick="return btnAddComplex_onclick()" />

然后是相应的JavaScript,当用户点击上面的按钮时,执行这段JavaScript以调用Web Method
  1. function btnAddComplex_onclick() {
  2.  var cplx1 = {Real: $('cplx1r').value, Imag: $('cplx1i').value};
  3.  var cplx2 = {Real: $('cplx2r').value, Imag: $('cplx2i').value};
  4.  SimpleWebService.AddComplexNumber(cplx1, cplx2, onAddComplextNumberComplete);
  5.  }
  6.  function onAddComplextNumberComplete(result) {
  7.  $('btnAddComplex').value = result.Real.toString() + ' + ' + result.Imag.toString() + 'i';
  8.  }

浏览器中运行一下,初始化:

posted on 2008-07-28 12:23  9who  阅读(342)  评论(0编辑  收藏  举报

导航