37 votes

Appels .NET AJAX vers ASMX, ASPX ou ASHX?

Quel est le moyen le plus efficace d'appeler une logique métier à partir de javascript côté client à l'aide d'AJAX? Il semble que vous pouvez appeler un [WebMethod] sur un aspx directement à partir de javascript (dans mon cas, j'utilise JQuery pour aider) OU vous pouvez appeler un .asmx directement. Qui appeler encourt moins de frais généraux? Quelles sont les bonnes pratiques?

Aussi, ce qui ne l' [ScriptService] attribut d'une classe? Je n'ai jamais utilisé cette avant sur mon .aspx [WebMethod] les méthodes et tout semble fonctionner correctement.

J'espère que c'est purement objective de la question. Merci à l'avance!

30voto

Brendan Kowitz Points 1562

Le ScriptService trucs à mon avis, est un joyau caché dans asp.net. Les appels vers le service de script ne sont pas passback des données de formulaire + viewstate, ils sont maigres, rapide JSON charges.

Heres la meilleure partie, ASP.NET3.5 scriptmanager pouvez faire la plupart du travail pour vous au sujet de la génération d'une méthode JS pour vous appeler et également la mise en place de toute JS classes nécessaires.

Un exemple simple pour récupérer les détails d'une "Personne", en supposant que la Personne est une classe C#.

Dans 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 */
    }
  }
}

Dans DetailsPage.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server">
 <Services>
  <asp:ServiceReference Path="~/Services/PersonService.asmx" />
 </Services>
</asp:ScriptManager>

En utilisant une telle configuration, vous n'aurez même pas besoin de l'aide de JQuery pour appeler le service et obtenir un JS de votre version de C# la classe Personne, .net n'est que pour vous. Un exemple d'utilisation de ce service à partir de JS serait:

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;
}

De toute façon, il serait plus intéressant de regarder dans le ASP.NET Ajax ScriptService choses. Même si vous décidez de ne pas l'utiliser cette fois, c'est un assez méchant fonctionnalité.

Liens

16voto

Lou Franco Points 48823

Si vous vous souciez de la surcharge du côté serveur, alors envoyer un simple GET avec une chaîne de requête à un ASHX le serait probablement. C'est certainement préférable à un fichier .ASPX, qui passera par un cycle de vie d'une page dont vous n'avez pas besoin.

L’avantage d’une méthode Web ASMX est qu’elle repose sur un standard qui peut être appelé facilement par d’autres technologies (prend en charge la découverte). Avec de la documentation, votre .ASHX sera tout aussi facile à appeler.

13voto

Dave Ward Points 36006

La façon dont vous avez formulé votre question, je crois que vous êtes compte tenu de la différence entre un ASMX "ScriptService", un ASHX HttpHandler, et un ASP.NET AJAX "PageMethod" (pas un Page ASPX).

Si c'est le cas, ils sont tous très semblables. L'ASP.NET AJAX PageMethods sont, à toutes fins et intentions, identique à ASMX ScriptServices. Ils n'ont pas de créer une instance de la Page, afin de ne pas payer les frais généraux qui sont normalement associés avec des pages ASPX.

Sauf si vous parlez de saturer le serveur de requêtes, vous trouverez probablement que tous les trois ont un rendement comparable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X