2010-12-03 20 views

Répondre

1

Vous devez utiliser le service WCF activé par Ajax. Je ne me souviens pas exactement du nom, mais il devrait être marqué d'un attribut pour être accessible à partir de JS.

+0

@John - puisque @RPM n'a plus de commentaire ici, il apparaît à première vue comme si vous répondiez à @Davita, dont la réponse est la bonne BTW. Le service WCF Ajax-Activé est la voie à suivre - si vous êtes prêt à garder votre nez et utiliser WCF qui est. – mattmc3

0

Vous ne devez jamais utiliser le modèle « Web Service » à moins que vous maintenez le code existant et ne peut pas changer.

4

Utilisez plutôt un gestionnaire HTTP générique. Ils sont plus simples à coder.

+0

Sérieusement? Veuillez justifier cette déclaration surprenante. –

+1

Pourquoi utiliser un service Web ou un service wcf qui sont construits efficacement au-dessus d'un gestionnaire? – Phill

+0

@Phill: pourquoi utiliser un langage de haut niveau, quand il est construit sur le code machine? –

0

Si vous appelez juste une seule utilisation de la méthode ScriptMethod

Vous pouvez coder en ligne avec la page qu'il est utilisé sur. http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-web-services

Utilisation de l'attribut ScriptMethod

L'attribut ScriptService est le seul attribut ASP.NET AJAX qui a à définir dans un service Web .NET dans afin qu'il soit utilisé par ASP .NET Pages AJAX. Toutefois, un autre attribut nommé ScriptMethod peut également être appliqué directement aux méthodes Web dans un service. ScriptMethod définit trois propriétés dont UseHttpGet, ResponseFormat et XmlSerializeString. La modification des valeurs de ces propriétés peut être utile dans les cas où le type de demande acceptée par une méthode Web doit être changé pour GET, lorsqu'un Web méthode doit renvoyer des données XML brutes en la forme d'un XmlDocument ou objet XmlElement ou lorsque les données renvoyées par un service doivent toujours être numérotées en tant que XML au lieu de JSON .

La propriété UseHttpGet peut être utilisée lorsqu'une méthode Web doit accepter les demandes GET par opposition aux requêtes POST. Les demandes sont envoyées à l'aide d'une URL avec Web Paramètres d'entrée de méthode convertis en paramètres QueryString. Par défaut, la propriété UseHttpGet est définie sur false et ne doit être définie sur true que lorsque les opérations sont reconnues comme sûres et que les données sensibles ne sont pas transmises à un service Web . Le Listing 6 montre un exemple de utilisant l'attribut ScriptMethod avec la propriété UseHttpGet.

+0

Notez que l'utilisation de [ScriptMethod] 'lie votre code à l'ancienne technologie de service Web ASMX, qui a été largement remplacée par WCF. '[ScriptMethod]' peut être remplacé par WCF, mais je pourrais être convaincu que c'est une bonne idée d'appeler la méthode _only_ depuis la page, et où la simplicité est plus importante que la généralité. –

+2

Il peut être vieux (héritage), mais il fonctionne et est simple et élégant. Il y a quelque chose à dire pour ça. – mattmc3

+0

@mattmc: oui, il y a quelque chose à dire _for_ it, mais pas mal à dire _against_ it. Considérez: combien de temps faudra-t-il avant que les nouveaux développeurs regardent ce code et n'aient aucune idée de ce qu'est un "[PageMethod]"? –

0

Si ce sont vos seules options, j'ai trouvé que le service WCF activé par AJAX est le plus simple à utiliser. Il s'agit toujours de WCF, mais il configure pour vous la configuration correcte de web.config et masque l'interface que vous fournit le modèle "Service WCF". Il semble que ce soit la chose la plus proche de tout le désordre de la WCF par rapport à l'ancien style ASMX, en ce sens qu'il est simple d'y aller.

Tout comme une autre alternative, si vous arrive d'être en mesure d'utiliser ASP.NET MVC dans votre projet WebForms et juste besoin de cela pour un appel ajax, vous pouvez sauter le tralala de service Web tout à fait et créer un simple résultat JSON pour votre appel AJAX comme ceci:

// put this method in a controller 
public JsonResult AjaxJsonTest(string who) { 
    var result = new { 
     Success = true, 
     Message="Hello, " + (who ?? "world!") 
    }; 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Et alors vous pouvez l'appeler à partir jQuery comme ceci:

<script language="javascript" type="text/javascript"> 
function AjaxTestClick() { 
    $.ajax({ 
     type: "POST", 
     url: '<%: Url.Action("AjaxJsonTest", "Test") %>', 
     data: { who: 'whomever' }, 
     success: function (resultData) { 
      if (resultData.Success) { 
       alert(resultData.Message); 
      } 
      else { 
       alert('Ajax call failed.'); 
      } 
     } 
    }); 
} 
</script> 

Des tonnes d'options - choisissez ce qui convient le mieux à votre situation.