在ASP.NET Atlas中调用Web Service——直接在ASPX页面上暴露Web Method

作者:Dflying Chen ( http://dflying.cnblogs.com/

前面的一系列的文章都是直接调用单独的一个Web Service,而在实际项目开发中,特别是在对现有的项目转换中,把页面中的逻辑再提取到专门的Web Service中往往会带来相当多的工作。Atlas充分考虑到了这一点,允许您将服务器端的public方法加上[WebMethod]属性以允许客户端JavaScript的直接调用。

想允许客户端直接调用定义在ASPX页面中的方法,您需要指定该方法为public,并且添加[WebMethod]属性,例如如下定义在ASPX文件中的服务器端方法:

None.gif < script runat = " server " >
None.gif    [WebMethod]
None.gif    
public   int  AddInt( int  int1,  int  int2)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
return int1 + int2;
ExpandedBlockEnd.gif    }

None.gif
</ script >

在客户端,Atlas 将为您Mashup 出一个AddInt 的JavaScript 方法,存在于一个特殊的命名空间 PageMethods 中,这样您就可以通过PageMethods.AddInt() 调用上面的方法了。

同时,将WebMethod定义到ASPX页面中,您还可以在该方法中访问一切页面上的服务器端控件的值和ViewState,并且整个页面的的生存周期将和传统的ASP.NET页面PostBack一样,诸如Page_Load等方法均会被调用,可以让我们对页面有更强的访问能力。不过这样也带来了性能上的折扣,因为每次调用Web Method的时候都会把页面上的ViewState和控件的值传回给服务器,并且服务器端处理整个页面的生存周期将要比仅仅处理一个纯粹的定义在ASMX中的Web Method要复杂的多。所以这里我推荐尽可能的使用纯粹的Web Service,请参考:在Atlas服务器端实现中推荐使用Web Service而不是Page Method

下面来看一个实例,首先来定义在ASPX中的WebMethod,可以看到这里不单单求两个数的和,还访问了一个页面上的服务器端TextBox的值:

None.gif < script runat = " server " >
None.gif    [WebMethod]
None.gif    
public   string  AddInt( int  int1,  int  int2)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
return (int1 + int2).ToString() + string.Format("\r\nAnd the Server TextBox's Text is '{0}'.", tbServer.Text);
ExpandedBlockEnd.gif    }

None.gif
</ script >

然后是页面的ScriptManager ,这里无需添加任何引用了:
None.gif < atlas:ScriptManager  ID ="scriptManager"  runat ="server"   />

然后两个用来输入加数的input 以及用来触发服务器调用的input :
None.gif < input  id ="value1"  type ="text"  value ="1"   />
None.gif
< input  id ="value2"  type ="text"  value ="2"   />
None.gif
< input  id ="btnAdd"  type ="button"  value ="Add!"  onclick ="return btnAdd_onclick()"   />

还有一个服务器端TextBox :
None.gif < asp:TextBox  ID ="tbServer"  runat ="server"  Text ="Server control" ></ asp:TextBox >

最后是JavaScript 调用,注意 PageMethods 这个内建的命名空间:
ExpandedBlockStart.gif ContractedBlock.gif function  btnAdd_onclick()  dot.gif {
InBlock.gif    PageMethods.AddInt(
InBlock.gif        $('value1').value,
InBlock.gif        $('value2').value,
InBlock.gif        OnComplete
InBlock.gif    );
ExpandedBlockEnd.gif}

None.gif
function  OnComplete(result) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    alert(result);
ExpandedBlockEnd.gif}

浏览器中运行,输入两个加数,然后在Server 端的TextBox 中输入一些字符,点击Add ,可以看到Server 端的TextBox 的值却是被访问到了:
methodonpage1.JPG

这是Fiddler截获的网络传输,可以看到ViewState和TextBox都被传回了Server:
methodonpage2.JPG

该实例程序的源代码可以在此下载:http://files.cnblogs.com/dflying/WebMethodOnPage.zip

转载于:https://www.cnblogs.com/dflying/archive/2006/05/30/Atlas_and_Web_Service__Calling_Page_Method.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值