随笔-312  评论-12034  文章-2  trackbacks-256

English Version: http://dflying.dflying.net/1/archive/107_prefer_web_services_to_page_methods_in_atlas_server_side_implementation.html

我们可以用两种方式把一个服务器段方法暴露给客户端Atlas调用:Web ServicePage Method。我推荐使用Web Service的方法。

所有人都应该非常重视的一点是Web ServicePage Method的工作原理以及工作过程有很大的分别。对于Atlas调用Web Service来说,当请求被发送时候,仅仅简单传给服务器方法的参数数据。而对于Atlas调用Page Method来说,传输的数据将会很多,将把表单中所有的域,包括ViewState,一起传送到服务器。在服务器端,它的工作方式也和普通的PostBack很相似:在这个Page Method被调用前,所有的服务器控件将得到它自身的状态。这也正是为什么Page Method中可以访问页面中控件状态的原因。

因此我的建议是只要在确实需要使用Page Method的时候(比如说需要在Page Method中访问页面中的控件状态)才使用Page Method,否则尽可能多地使用Web Service,这样可以使程序在性能上有所提高。使用Web Service的另一个好处是让程序层次架构明晰。

您可以在http://www.fiddlertool.com/fiddler/下载Fiddler,一个很好的HTTP watcherdebugger,用来监视客户端与服务器的实际HTTP通信内容。

这里是一段Web Method,只是简单的返回服务器的当前时间。

[WebMethod]
public DateTime GetCurrentDateTime()
{
    
return DateTime.Now;
}

让我们分别以Web ServicePage Method运行这一段Web Method,并用Fiddler观察实际运行时的HTTP通信内容:

Web Service

Page Method

可以看到以Web Service方式运行时Post回服务器的Content-Length0,而以Page Method运行时候为1718

posted on 2006-04-03 18:15 Dflying Chen 阅读(4376) 评论(48)  编辑 收藏 网摘 所属分类: ASP.NET 综合ASP.NET AJAX (Atlas)

评论:
#1楼  2006-04-03 18:17 | 兰亭      
应该是这样的
  回复  引用  查看    
#2楼  2006-04-03 18:24 | DarkAngle      
不错,受教了.
  回复  引用  查看    
#3楼  2006-04-04 09:12 | Vokobo      
不知道ajaxpro.net会不会也是这样子的?

  回复  引用  查看    
#4楼  2006-04-04 09:28 | 灏忓皬 [未注册用户]
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.ComponentModel.Design;
using System.Windows.Forms;

  回复  引用    
#5楼  2006-04-04 10:08 | atliu [未注册用户]
最近连续看了作者的好些文章,真的非常不错,谢谢了.
  回复  引用    
#6楼 [楼主] 2006-04-04 11:36 | Dflying Chen      
@Vokobo
ajaxpro.net不太了解。

  回复  引用  查看    
#7楼 [楼主] 2006-04-04 11:36 | Dflying Chen      
@DarkAngle
@atliu
继续努力,呵呵。

  回复  引用  查看    
#8楼  2006-04-04 23:18 | 么么茶.NET      
Atlas 中要使用方法,不是方法上都要加上WebMethod吗?
再页面中不都是用PageMethods使用定义的WebMethod的吗?
老兄难道不是在aspx页中通过PageMethods使用定义的方法的吗?

  回复  引用  查看    
#9楼 [楼主] 2006-04-05 09:03 | Dflying Chen      
@么么茶.NET
WebMethod可以置于Web Service中,这也是我推荐的方法。

  回复  引用  查看    
#10楼  2006-04-05 09:36 | 锦瑟 [未注册用户]
请问如何在atlas中调用pagemethod,请给个例子.我看到的所有官方教程都是调的webservice.
  回复  引用    
#11楼 [楼主] 2006-04-05 10:13 | Dflying Chen      
@锦瑟
Code in aspx.cs file:
public partial class TrafficTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

[WebMethod]
public DateTime GetCurrentDateTime()
{
return DateTime.Now;
}
}

JavaScript in aspx:
function getDateTimeFromPageMethod()
{
PageMethods.GetCurrentDateTime(onComplete);
}

  回复  引用  查看    
#12楼  2006-04-07 15:22 | 程序员      
请问 Fiddler 是什么软件
  回复  引用  查看    
#13楼 [楼主] 2006-04-07 16:32 | Dflying Chen      
@程序员
您可以在http://www.fiddlertool.com/fiddler/下载Fiddler,一个很好的HTTP watcher和debugger,用来监视客户端与服务器的实际HTTP通信内容。

  回复  引用  查看    
#14楼  2006-04-08 07:18 | 一滴水      
@_@;谢谢你的文章,学习Atlas中,但是英文不好 呜呜
  回复  引用  查看    
#15楼 [楼主] 2006-04-08 07:49 | Dflying Chen      
@一滴水
搞我们这一行的,英语就是我们的母语。
英语不好,道路会坎坷很多。

  回复  引用  查看    
#16楼  2006-04-18 14:31 | ABeyondMe      
我刚刚接触Atlas,虽然个人感觉使用WebService是很不错的方法,但是这样在JavaScript中暴露WebService方法的话是不是要考虑身份验证的问题?不然别人利用WSDL解析到WebService方法后可以将这个方法挪作他用,或者更恶劣的,恶意刷新WebService造成服务器忙等等潜在的问题。只是我接触WebService比较少,不知道它是否集成了身份验证!
  回复  引用  查看    
#17楼 [楼主] 2006-04-18 14:59 | Dflying Chen      
@ABeyondMe
确实,Web Service的安全性应该重视,目前已经有一些解决方案,您可以Google一下相应的文章。

  回复  引用  查看    
#18楼  2006-05-22 16:00 | 寒冷的冰      
@Dflying Chen

你可以试一下HttpWatch这个软件,感觉比Fiddler好用

  回复  引用  查看    
#19楼 [楼主] 2006-05-22 17:17 | Dflying Chen      
@寒冷的冰
花钱的,只能在公司用……

  回复  引用  查看    
#20楼  2006-05-31 10:30 | 不 [未注册用户]
请问Fiddler这个东西怎么用啊,有没有相关的介绍文挡呀。谢谢!
  回复  引用    
#21楼 [楼主] 2006-05-31 11:08 | Dflying Chen      
@不
http://www.fiddlertool.com/fiddler/
上面有好多介绍文章的

  回复  引用  查看    
#22楼  2006-06-07 17:22 | 宇宙工业机器 [未注册用户]
请问客户端如何调用Web Service?
  回复  引用    
#23楼 [楼主] 2006-06-08 11:37 | Dflying Chen      
#24楼  2006-08-13 17:08 | spiderDemo [未注册用户]
一个网站中可以包含多个Web Service文件么?如果可以的话,调用得多了,会不会影服务器的性能呢?
另外感觉应用了ATLAS后,主要是使用了HTTP控件,而Server控件好象就没有什么需要用到的地方了(如asp:textbox),是不是基本上就不用了呢?

  回复  引用    
#25楼 [楼主] 2006-08-13 18:12 | Dflying Chen      
@spiderDemo
“网站中可以包含多个Web Service文件”是什么意思?
Atlas有两种主要的编程模型,如果使用纯粹的客户端开发,那么确实服务器端控件基本都不再需要了。

  回复  引用  查看    
#26楼  2006-08-14 08:59 | spiderDemo [未注册用户]
“网站中可以包含多个Web Service文件”
就是说我看到例子都是在一个站点中建立一个“Web服务”文件,可不可以建立多个WEB服务文件呢?(因为有时可能需要SERVER处理的事情很多呀)
另外十分感谢百忙中的回复

  回复  引用    
#27楼  2006-08-14 14:14 | spiderDemo [未注册用户]
再问一下:use 'Atlas' client-side declarative markup 与using client script 来调用远程 Web service相比,我没有感到前有什么优点呀,而且更麻烦些了。是我的理解有什么问题么?就是下面的这个例子里的:
Walkthrough: Creating a Declarative Web Application with ASP.NET "Atlas"

  回复  引用    
#28楼 [楼主] 2006-08-14 20:30 | Dflying Chen      
@spiderDemo
当然可以了,您只需要在ScriptManager中添加各个Web Service的引用即可。

  回复  引用  查看    
#29楼 [楼主] 2006-08-14 20:33 | Dflying Chen      
@spiderDemo
声明式标记是下一代编程模式的潮流,即面向组件编程,并通过绑定将各个组件连接到一起。您可能还不大熟悉,或是还不太能够接受吧。仔细体会一下,它的优势还是非常明显的。

  回复  引用  查看    
#30楼  2006-09-20 20:57 | LJM[匿名] [未注册用户]
我感觉,用WebService是很不错,尤其是看了作者演示以后。但是webservice是完全暴露在外面,现在我是加了一个验证串来作身份验证,不过这样可能就增加了开销,一个小小的功能为了atlas的效果都要这样做觉得有些“小题大做”,也会造成安全性问题,也造成了部署上难度的增加。有时候反而宁愿用page mothod了。
  回复  引用    
#31楼 [楼主] 2006-09-21 19:44 | Dflying Chen      
ASP.NET也有对Web Service安全的内建支持阿。
  回复  引用  查看    
#32楼  2006-09-21 23:53 | LJM[匿名] [未注册用户]
Dflying Chen
可否提供一些资料呢?上网找了一下,感觉没有什么比较理想的方法。谢谢。

  回复  引用    
#33楼  2006-09-22 00:23 | asdsf [未注册用户]
六合博客站点:http://www.bokehk.com
六合博客站点:http://bokehk.com

  回复  引用    
#34楼 [楼主] 2006-09-29 12:07 | Dflying Chen      
@LJM[匿名]
就和ASP.NET页面一样的啊,可以在web.config中设置

  回复  引用  查看    
#35楼  2006-10-19 12:52 | MK2      
@Vokobo
Ajax.net不是同的,只发送少量数据,回送回来的只是JSON,数据如下:
 
POST /ajaxpro/Ajax_net.Ajaxnet,gfsSystem.ashx HTTP/1.1
Accept: */*
Content-Type: application/x-www-form-urlencoded
X-AjaxPro-Method: ReviewList
Accept-Encoding: gzip, deflate
Referer: http://jxb.gdut.edu.cn/intro/articles/2006092302535100_2_29_120.html
Accept-Language: zh-c
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: jxb.gdut.edu.cn
Content-Length: 45
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=lquxwh45gvor3z453cazme55

{"NewsID":"120","PerPageCount":10,"PageNo":1}
 
回送数据:
 
HTTP/1.1 200 OK
Date: Thu, 19 Oct 2006 04:59:57 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: text/plain; charset=utf-8
Content-Length: 1825

new Ajax.Web.DataSet([new Ajax.Web.DataTable([["ID","System.Int32"],["NewsID","System.Int32"],["Title","System.String"],["Content","System.String"],["UserName","System.String"],["UserEmail","System.String"],["UserIP","System.String"],["SubmitTime","System.DateTime"],["Mode","System.Int16"],["rid","System.Int32"],["fid","System.Int32"]],[[91,120,"Re:网站正式改版啦!","
<p>不知道大家对本版设计感觉如何呢?</p>","admin","fengmk2@163.com","10.10.193.72",new Date(Date.UTC(2006,8,22,18,59,0,0)),0,2,29],[92,120,"Re:网站正式改版啦!","<p>界面很不错啊,支持一下</p>","枫","ilyyxb@126.com","58.62.225.219",new Date(Date.UTC(2006,8,23,7,22,47,0)),0,2,29],[93,120,"Re:网站正式改版啦!","<p>呵呵,版面可改了,也花了不少心思哦!!!也希望我们广工的国防生能够借这股新生力继续前进!创造喜人的成绩来!</p>","pololizc","309173751@qq.com","58.62.226.192",new Date(Date.UTC(2006,8,23,11,38,12,0)),0,2,29],[104,120,"Re:网站正式改版啦!","<p>不错不错...</p><p>比以前好多了!</p>","Joe","joe861204@163.com","58.62.226.243",new Date(Date.UTC(2006,8,26,11,26,50,0)),0,2,29],[113,120,"Re:网站正式改版啦!","<p>数据加载提示完成,若出现错误,请大家回馈.</p>","admin","fengmk2@163.com","121.32.210.49",new Date(Date.UTC(2006,8,30,1,36,55,0)),0,2,29],[121,120,"Re:网站正式改版啦!","{duration:1.5}","{duration:1.5}","123123@163.com","10.10.193.76",new Date(Date.UTC(2006,9,9,9,2,16,0)),0,2,29],[125,120,"Re:网站正式改版啦!","增加了RSS(<href=\"http://jxb.gdut.edu.cn/rss/\">http://jxb.gdut.edu.cn/rss/</a>)<img alt=\"\" src=\"/fckeditor/editor/images/smiley/qq/4.gif\" />","admin","fengmk2@163.com","10.10.193.76",new Date(Date.UTC(2006,9,18,4,10,2,0)),0,2,29]])])/*
 
呵呵,交流交流

  回复  引用  查看    
#36楼 [楼主] 2006-10-19 19:00 | Dflying Chen      
@MK2
谢谢!

  回复  引用  查看    
#37楼  2006-10-20 01:30 | MK2      
不知道在Atlas页面中加入prototype.js 1.4.0,会不会引起错误呢,因为$()方法重复了,好有其它很多方法会不会也产生问题`````
  回复  引用  查看    
#38楼 [楼主] 2006-10-20 09:02 | Dflying Chen      
@MK2
经过实际试验,会的

  回复  引用  查看    
#39楼  2006-10-20 12:21 | MK2      
@Dflying Chen
晕,又要大动荡了`````

  回复  引用  查看    
#40楼  2007-05-24 01:17 | adtpsdtt [未注册用户]
<a href="http://xpjsizgu.com">kxqhxgks</a> sbdttyif http://pexhxovm.com movlnzxt outulije [URL=http://mzjukrbo.com]ynoylfua[/URL]
  回复  引用    
#41楼  2007-05-24 13:35 | cheap alprazolam neuropathist unabiding [未注册用户]
I am free of all prejudice. I hate everyone equally.
  回复  引用    
#42楼  2007-05-24 23:09 | losartan [未注册用户]
Be honorable yourself if you wish to associate with honorable people.
  回复  引用    
#43楼  2007-05-25 03:07 | adipex online [未注册用户]
Men are equal; it is not birth but virtue that makes the difference.
  回复  引用    
#44楼  2007-05-25 03:30 | xenical papillar voodoo [未注册用户]
I have enjoyed greatly the second blooming... suddenly you find - at the age of 50, say - that a whole new life has opened before you.
  回复  引用    
#45楼  2007-05-25 17:56 | ebhfyccf [未注册用户]
duivcejo http://mghitjak.com cazaaofr qszpzofe [URL=http://xdzxvhsi.com]lriremhi[/URL] <a href="http://vjakhhgk.com">rzktvnyn</a>
  回复  引用    
#46楼  2007-05-25 17:58 | ebhfyccf [未注册用户]
duivcejo http://mghitjak.com cazaaofr qszpzofe [URL=http://xdzxvhsi.com]lriremhi[/URL] <a href="http://vjakhhgk.com">rzktvnyn</a>
  回复  引用    
#47楼  2008-07-01 10:16 | veinyf#163.com [未注册用户]
支持并接受这个建议,事实的确如此
使架构清晰,减少回传数据量。`

  回复  引用    

发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: