2010-09-10 4 views
0

Salut à tous et merci pour votre temps à l'avance.Problème lors de l'implémentation de WebInvoke Method = "POST" pour un service REST sur WCF

J'ai un problème en essayant de travailler une méthode REST sous WCF. La méthode est POST, et je ne suis pas en mesure de récupérer les valeurs envoyées à partir de la demande.

Voilà comment je déclare le service selon un exemple de Microsoft sur le WebInvokeAttribute Class:

[OperationContract] 
    [WebInvoke( 
     Method = "POST" , 
     BodyStyle = WebMessageBodyStyle.Bare , 
     UriTemplate = "/sum?x={x}&y={y}" , 
     ResponseFormat = WebMessageFormat.Xml)] 
    ResponseData Sum(string x, string y); 

Voilà comment je mis en œuvre cette fonction dans la classe:

public ResponseData Sum(string x , string y) 
    { 
     ResponseData retorn = new ResponseData(); 

     int _x = 0; 
     int _y = 0; 

     try 
     { 
      _x = Convert.ToInt32(x); 
      _y = Convert.ToInt32(y); 

      retorn.Data = _x + _y + ""; 
     } 
     catch (Exception ex) 
     { 
      retorn.Data = ""; 
      retorn.Error = true; 
      retorn.MsgError = ex.Message; 
     } 
     return retorn; 
    } 

responseData est une classe implémentation de DataContract:

[DataContract] 
public class ResponseData 
{ 
    private bool error = false; 
    private string msgError = ""; 

    [DataMember] 
    public string Data { get; set; } 
    [DataMember] 
    public bool Error 
    { 
     get 
     { 
      return error; 
     } 

     set 
     { 
      error = value; 
     } 
    } 
    [DataMember] 
    public string MsgError 
    { 
     get 
     { 
      return msgError; 
     } 

     set 
     { 
      msgError = value; 
     } 
    } 
} 

Comme vous pouvez e, un exemple assez simple.

Le problème est que cela ne fonctionne pas. Tha paramètres x et y des fonctions ont toujours une valeur nulle, peu importe ce que je vous envoie le long de la demande, de sorte que le message de retour est toujours:

<responsedata xmlns="http://schemas.datacontract.org/2004/07/RestServiceProvaCrypto" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><data>0</data><error>false</error><msgerror></msgerror></responsedata>

Donc ma question est, ce que je Je fais mal parce que je ne peux pas obtenir les valeurs passées par la demande pour x et y?

Je travaille avec VS 2008 et .Net 3.5.

Encore une fois, merci pour votre temps.

Ramon M. Gallart

+0

Pouvez-vous montrer comment vous envoyez la demande? –

+0

Salut Darrel, par exemple, d'un formulaire HTML dont l'action est POST et a 2 zones de texte nommées 'x' et 'y'. J'ai récemment vu en utilisant Fiddler2 que la création d'une URL comme .../sum? X = 1 & y = 2 le serveur renvoie une réponse correcte tandis que la même URL envoyée à partir d'un navigateur Web renvoie la méthode Invalid. Aussi, ce que je voudrais, c'est passer les valeurs non de l'url, mais comme le corps de la requête comme cela serait dans une requête post. Mais en utilisant Fiddler2 de cette manière ou en envoyant un post, le résultat est ce que j'ai mentionné dans le post, null pour x et y. Merci pour votre temps. –

Répondre

3

Je ne sais pas combien cela vous aidera à ce moment, mais selon moi, vous invoquez le mauvais concept CRUD pour votre problem.You devrait essayer d'utiliser l'attribut WebGet et garder votre UriTemplate est le même, car en fait vous transmettez les données via une chaîne de requête. Je suggère ..

[OperationContract] 
[WebGet(
    BodyStyle = WebMessageBodyStyle.Bare , 
    UriTemplate = "/sum?x={x}&y={y}" , 
    ResponseFormat = WebMessageFormat.Xml)] 
ResponseData Sum(string x, string y); 

Hope this helps ..

Cordialement, VVN

Questions connexes