PageMethods还是Generic Handler?

时间:2010-07-21 09:20:02

标签: asp.net ajax

我正在创建一个用户可以回复主题,打开主题等的网站,当用户发送消息时,我不想回发;这太丑了。

我现在正在使用通用处理程序,但我遇到了一些问题。就像XMLHttpRequest的onreadystate正在改变时使用UpdatePanel更新GridView一样。

我决定使用PageMethods,但我也想问你。

哪个更好,更快,更有用:PageMethods还是Generic Handlers?

3 个答案:

答案 0 :(得分:14)

认为 Page方法和HTTP处理程序的速度之间会有很大差异。但是,如果您担心应用程序的性能,则应对每个选项进行基准测试,并选择最适合您的选项。

要回答更好或更多有用的问题,基本上在ASP.NET上下文中,您有三个选项,每个选项各有利弊:

  1. 页面方法 - 您的所有代码都包含在单个页面中,如果该页面仅使用 ,则可以正常使用。您应该实现将页面特定的HTML片段作为Page方法返回的方法。但是,如果我们讨论的是可重用代码,例如“保存主题”或“获取主题”,则可能需要考虑将此代码外部化到其他位置。我保证随着您的应用程序的增长,您也需要在应用程序端的其他地方使用这些方法。

  2. 通用HTTP处理程序 - 非常轻量级,非常适合您需要在整个应用程序中经常调用的代码。大多数情况下,通用处理程序是为了提供内容而实现的,我不知道围绕这个主题的最佳实践是什么,但对我来说POST通用处理程序来保存数据有一种独特的气味。您还会发现,对于相关功能(保存,获取单个,获取许多等),您最终会得到一个 swarm 的处理程序,或者一个带有巨型switch语句和模糊的处理程序基于查询字符串和POST参数的合同。我不建议使用此选项来实现广泛的AJAX应用程序。对于小零件而言,它可能适合您的需求。

  3. ASP.NET Web服务(或WCF) - 您在问题中未提及的第三个选项是ASP.NET Web服务(.asmx)。您可以轻松地将它们包含在现有ASP.NET应用程序中,而无需任何其他框架依赖项。它们在选项1和2之间提供了良好的平衡。一方面,您可以在整个应用程序中获得可重用性,如果您愿意,甚至可以在应用程序之外,哪些Page方法无法提供。另一方面,您可以以有意义的方式巧妙地将相关功能绑定在一起,这往往会使通用处理程序变得混乱。您还可以根据需要使用SOAP XML,JSON或HTTP POST / Plaintext与服务进行交互。

  4. 这里的通配符选项是:使用ASP.NET MVC和jQuery 。如果您正在寻找构建一个精简和卑鄙的Web应用程序,并且您通常会发现回发很难看,并且当xmlhttprequest更改readystate有趣时,您会发现诸如完全之类的内容,它可能会为您提供更好的整体体验。也许不是这个项目,而是下一个项目。

答案 1 :(得分:0)

如果您的意思是使用通用处理程序 Web服务端点,那么您可以做出以下区分:

  • 如果只需要在该页面上提供该功能,则可以使用PageMethods
  • 如果要重用该功能,可以使用Web服务端点。

就我个人而言,我几乎总是使用Web服务端点(在我的情况下是启用了ajax的WCF)。

答案 2 :(得分:0)

我不明白为什么你不应该使用泛型处理程序。我认为它们是最好的 - 简单而灵活。