WebMethod与ScriptMethod的区别

45

我有一个标记有[WebMethod]属性的.NET 3.5 aspx页面方法。我正在使用jQuery调用它,并在两个方向上发送JSON,这一切都非常顺利。我的问题是,当应用于一个方法时,[ScriptMethod]有什么作用?我尝试了一下,它似乎产生了相同的结果。 ScriptMethodWebMethod是相同且可以互换的吗?还是其中一个提供了另一个不具备的功能和/或开销?总的来说,我发现自己对实现Web服务的所有选项感到困惑,我想知道每个选项的优缺点。


3
很棒的问题,欢迎来到 SO! - JoshJordan
2个回答

36
您可以在以下两种情况下使用ScriptMethod属性:
  1. 您正在使用jquery或任何其他ajax请求机制,但希望该请求是GET而不是POST。
  2. 您想要在JavaScript中接收一个XML格式的响应。
如果您没有上述要求,只需使用ajax请求来获取JSON响应,那么您可以简单地使用WebMethod。
这里还有一个更令人困惑的元素,那就是何时使用ScriptService属性?如果您正在使用Microsoft Ajax客户端脚本框架,则使用此属性将告诉服务器在客户端生成代理对象,以便您可以像普通对象一样调用函数。即 var MyRemoteObject = new RemoteObject(); MyRemoteObject.getMessage(....) 即使使用ScriptService属性,您也只需要在上述情况下添加ScriptMethod属性。
在开始时,我觉得ScriptService和ScriptMethod属性一起工作,就像WebService和WebMethod属性一样,这让我很困惑。

2
ScriptMethodAttribute属性是可选的。(但是,可以从客户端脚本调用的方法必须应用System.Web.Services.WebMethodAttribute属性。)如果一个方法没有标记ScriptMethodAttribute,则该方法将使用HTTP POST命令进行调用,并且响应将被序列化为JSON。您无法从脚本覆盖此设置。
来源- http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx 编辑:WebMethod和ScriptMethod不是竞争性属性。ScriptMethod可以作为上述段落所说的附加注释。

WebMethod是通过HTTP POST调用的方法...如果您添加ScriptMethod呢?这两种方法都可以从客户端调用...我不懂。 - Patrick Desjardins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接