什么是使用 AJAX 从客户端的 JavaScript 调用一些业务逻辑的最有效方法?看起来你可以直接从 JavaScript 调用 aspx 上的 [WebMethod](在我的情况下,我使用 JQuery 帮助)或直接调用 .asmx。哪一种调用产生的开销更小?最佳实践是什么?
另外,类上的[ScriptService]属性是什么作用?我从未在我的.aspx [WebMethod]方法上使用过这个属性,但一切似乎都运行正常。
我希望这是一个纯客观的问题。先在这里谢谢!
什么是使用 AJAX 从客户端的 JavaScript 调用一些业务逻辑的最有效方法?看起来你可以直接从 JavaScript 调用 aspx 上的 [WebMethod](在我的情况下,我使用 JQuery 帮助)或直接调用 .asmx。哪一种调用产生的开销更小?最佳实践是什么?
另外,类上的[ScriptService]属性是什么作用?我从未在我的.aspx [WebMethod]方法上使用过这个属性,但一切似乎都运行正常。
我希望这是一个纯客观的问题。先在这里谢谢!
以我个人看来,ScriptService在asp.net中算是一颗隐蔽的宝石。调用脚本服务不会将表单数据和视图状态传回,它们是精简、快速的JSON载荷。
这是最棒的部分,ASP.NET 3.5 的 ScriptManager 可以为您生成大部分关于 JS 方法的代码,并建立所需的任何 JS 类。
一个获取“人员”细节的简单示例,假设“Person”是C#类。
在 PersonService.asmx 中:
namespace MyProj.Services {
[System.Web.Script.Services.ScriptService]
[System.Web.Script.Services.GenerateScriptType(typeof(Person))]
public class PersonService : System.Web.Services.WebService
{
[WebMethod, ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public Person GetPersonDetails(int id)
{
/* return Logic here */
}
}
}
在DetailsPage.aspx中
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Services/PersonService.asmx" />
</Services>
</asp:ScriptManager>
By using a setup like this, you won t even need the help of JQuery to call the service and get back a JS version of your C# Person class, .net does that all for you. An example of using this service from JS would be:
MyProj.Services.PersonService.GetPersonDetails(id, _onDetailsCallbackSuccess, _requestFailed, null);
_onDetailsCallbackSuccess: function(result, userContext, methodName) {
//all persons properties are now intact and available
document.getElementById( txtFirstname ).value = result.Firtname;
}
无论如何,研究ASP.NET Ajax ScriptService这个功能是非常值得的。即使您决定这一次不使用它,它也是一个相当不错的功能。
链接
如果您只关心服务器端开销,则向ASHX发送带查询字符串的简单GET请求可能是最好的选择。这绝对比需要经过页面生命周期的ASPX更可取。
ASMX网络方法的优点是它建立在一个标准上,可以轻松地被其他技术调用(支持发现)。尽管如此,有一些文档,你的.ASHX也将很容易调用。
您提出的问题方式,我认为您正在考虑ASMX“ScriptService”、ASHX HttpHandler和ASP.NET AJAX“PageMethod”(而不是实际的ASPX页面)之间的区别。
如果是这种情况,它们都非常相似。 ASP.NET AJAX PageMethods在所有情况下都与ASMX ScriptServices完全相同。它们不创建页面的实例,因此不会产生通常与ASPX页面相关的开销。
除非您要用请求饱和服务器,否则您可能会发现这三个表现相当。