2010-06-25 6 views
1

Je tente de créer un service Web ASMX capable d'exécuter une requête HTTP GET. J'ai l'extrait de code simple suivant pour illustrer ce que j'ai déjà fait.Services Web ASMX et HTTP GET

using System.Web.Script.Services; 
... 

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public string HelloWorld(HttpContext context) 
{ 
return context.Request.Params.Get("userId").ToString(); 
} 

En plus de cela, je l'ai également ajouté les noeuds suivants dans mon fichier web.config

<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    <add name="HttpPost"/> 
    </protocols> 
</webServices> 

Le problème que je suis face est que je reçois constamment la redoutée " System.Web.HttpContext cannot be serialized because it does not have a parameterless constructor "message d'erreur chaque fois que j'essaye de déboguer ce webservice. Je n'ai aucune idée de ce qu'est le problème, et j'apprécierais vraiment toute aide qui est offerte pour me sortir de ce dilemme. Je me rends compte que les requêtes HTTP GET sont censées être très simples, mais je ne sais pas vraiment quelle est la cause de mes frustrations.

Répondre

4

Je pense que vous voulez

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public string HelloWorld(int userId) 
{ 
    return userId.ToString(); 
} 

Vous pouvez spécifier des paramètres dans la signature de la fonction et vous pouvez accéder à la HttpContext comme Context (une propriété sur la classe de base WebService) si vous en avez besoin.

+0

Dans mon expérience personnelle, [ScriptMethod (UseHttpGet = true)] n'a aucune incidence sur la méthode de service. Cela ne force pas la méthode à utiliser seulement GET et sans elle vous pouvez toujours appeler la méthode avec GET aussi longtemps que vous l'avez autorisé dans votre web.config – Sal