【问题标题】:"WebMethod" attribute in the aspx and asmx files, difference?aspx 和 asmx 文件中的“WebMethod”属性,有什么区别?
【发布时间】:2011-11-14 10:19:12
【问题描述】:

我注意到在一些代码中 [WebMethod] 属性用于 aspx 页面的代码隐藏文件中。

但我记得,这个属性是用来暴露Web Service的,它经常出现在asmx文件中。

那么这两种用法有什么区别呢?

谢谢。

【问题讨论】:

标签: asp.net web-services asmx


【解决方案1】:

如果该方法也是静态的,您可以通过 javascript/ajax 调用该方法,而无需整页回发。 请注意,您的 ScriptManager 需要将 EnablePageMethods 属性设置为 true。

【讨论】:

  • 是的,我看到的这个属性的方法是静态的。那是某种阿贾克斯吗?顺便说一句,如果它不是静态的怎么办?
  • 是的,它可以通过javascript使用,例如ajaxtoolkit.net/AutoComplete/AutoComplete.aspx就是这个想法...
【解决方案2】:

代码中的 Web 方法用于 AJAX 调用。如果您使用的是 jquery 或类似的,并且您需要在您的页面上实现 ajax 功能,那么您将必须使用 WebMethod 属性定义您的方法,并且必须将其设为公共静态。然后只有它会起作用。

WebMethod 的概念我感觉是取自网络服务。由于 asp.net 没有任何已定义的方式来处理对 page behind 方法的 ajax 请求,因此他们扩展了此功能以用于代码隐藏方法。

请注意,作为公共静态方法,您可能无法在此处使用页面类的内部属性。所以,你需要处理它。

【讨论】:

  • 如果我们真的想要 AJAX,为什么不写一些 asmx Web 服务或者使用 WCF 并让 Javascript 来调用它呢?为什么我们必须在页面类中包含残缺的静态方法?
  • 可能有多种原因。 1)功能非常小,你不想打服务电话。因为当你公开一个服务调用时,你必须添加一个新的 web 方法/操作契约。 2)服务调用很昂贵,并且由于服务通信中涉及的层而需要更多时间才能返回(假设我们必须使用相同的逻辑)。 Web 方法背后的代码也驻留在同一个应用程序池中,因为调用非常快。 - 这就是我的感觉。其他人可能有不同的看法。
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
相关资源
最近更新 更多