web-dev-qa-db-fra.com

WebMethod vs ScriptMethod

J'ai un emplacement aspx .NET 3.5 avec une méthode marquée par le [WebMethod] attribut. J'appelle cela avec jQuery, envoyant JSON dans les deux sens. Tout cela fonctionne très bien. Ma question est, qu'est-ce que [ScriptMethod] faire quand appliqué à une méthode? J'ai essayé cela et cela semble donner le même résultat. ScriptMethod et WebMethod sont-ils identiques et interchangeables, ou l'un fournit-il des fonctionnalités et/ou des frais généraux que l'autre ne fournit pas? En général, je me retrouve confus avec toutes les options disponibles pour la mise en œuvre de services Web et j'aimerais savoir quels sont les avantages et les inconvénients de chacun.

44
Steve Johnson

Vous utilisez l'attribut ScriptMethod dans les 2 scénarios suivants.

  1. Vous utilisez jquery ou tout autre mécanisme de demande ajax, mais vous voulez que la demande soit un GET et non un POST.
  2. Vous souhaitez recevoir une réponse formatée XML en javaScript.

Si vous n'avez pas l'une des exigences ci-dessus; vous avez juste besoin d'une réponse JSON en utilisant une requête ajax, vous pouvez simplement utiliser la WebMethod.

Il y a encore un élément déroutant ici, quand utilisez-vous l'attribut ScriptService? ceci est utilisé si vous utilisez le framework de script Microsoft Ajax Client, ces attributs indiquent au serveur de générer des objets proxy sur le client afin que vous puissiez appeler des fonctions comme un objet normal. var MyRemoteObject = new RemoteObject();MyRemoteObject.getMessage(....) et même lorsque vous utilisez l'attribut ScriptService, vous n'avez pas besoin d'ajouter l'attribut ScriptMethod uniquement dans les scénarios ci-dessus.

Cela m'a dérouté au début parce que je pensais que les attributs ScriptService et ScriptMethod fonctionnaient ensemble, tout comme les attributs WebService et WebMethod.

32
Shrage Smilowitz

L'attribut ScriptMethodAttribute est facultatif. (Cependant, les méthodes qui peuvent être appelées à partir du script client doivent avoir l'attribut System.Web.Services .. ::. WebMethodAttribute appliqué.). Si une méthode n'est pas marquée avec ScriptMethodAttribute, la méthode sera appelée à l'aide de la commande HTTP POST et la réponse sera sérialisée en JSON. Vous ne pouvez pas remplacer ce paramètre à partir du script.

de - http://msdn.Microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

EDIT: WebMethod et ScriptMethod ne sont pas des attributs concurrents. ScriptMethod pourrait être une annotation supplémentaire, comme le dit le paragraphe ci-dessus.

2
shahkalpesh