English 中文(简体)
.NET AJAX调用ASMX、ASPX或ASHX?
原标题:
  • 时间:2009-03-23 11:43:27
  •  标签:

什么是使用 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页面相关的开销。

除非您要用请求饱和服务器,否则您可能会发现这三个表现相当。





相关问题
热门标签