2011-03-27 4 views
2

Comment puis-je obtenir les données dans une requête HTTP POST, reçue dans mon service WCF?extrait les données HTTP POST (WCF C#)

i envoyer les données à partir d'un autre service via HTTP POST:

 string ReportText = "Hello world"; 

     ASCIIEncoding encoding = new ASCIIEncoding(); 
     byte[] data = encoding.GetBytes(ReportText); 

     // Prepare web request... 
     String serverURL = ConfigurationManager.AppSettings["REPORT"]; 
     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serverURL); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/x-www-form-urlencoded"; 
     myRequest.ContentLength = data.Length; 
     Stream newStream = myRequest.GetRequestStream(); 

     // Send the data. 
     newStream.Write(data, 0, data.Length); 
     newStream.Close(); 

mais quand je reçois la requête POST dans le WCF je ne peux pas trouver un moyen de l'extraire à l'aide WebOperationContext.Current.IncomingRequest, comment puis-je extraire les données de la requête HTTP POST?

+0

Quelle fixation utilisez-vous pour soutenir 'application/x-www-form-urlencoded' dans votre service WCF? –

+0

Pouvez-vous publier à quoi ressemble votre code de service? Il ne semble pas du tout que vous vous connectiez à WCF, mais que vous créiez simplement une requête HTTP standard. – Tridus

+0

@tridus: le client qui envoie la requête POST l'envoie en tant que HTTP POST standard, et non à partir d'un WCF. Comment puis-je extraire de mon WCF les données POST qui sont envoyées comme l'exemple ci-dessus? (Liens, exemples de code ...) – Rodniko

Répondre

0

Hello world n'est pas exactement application/x-www-form-urlencoded. Vous devez coder le corps du message en conséquence someproperty=Hello%20world et utiliser les liaisons HTTP WCF.

+0

merci, Pouvez-vous nous en expliquer un peu plus ... Avez-vous un exemple de code? ... – Rodniko

-2

Ceci n'est pas une question de WCF, car vous n'utilisez pas WCF. Ce que vous faites vraiment est de soumettre un formulaire en utilisant HTTP Post, et vous devez créer une page web pour recevoir et gérer cela. Vous pouvez le faire avec la collection Request.Form.

Voici un exemple simple: http://bytes.com/topic/asp-net/answers/655226-how-use-request-form

5

Je suppose que vous utilisez un service de repos WCF et vous pouvez tirer les paramètres GET, mais vous ne pouvez pas lire les données post RAW?

Si tel est le cas, ajoutez un paramètre Stream à la fin de la liste des paramètres dans la déclaration du contrat. S'il existe un seul flux à la fin de la fonction, le framework le traite comme un flux de données brutes.

  [OperationContract] 
      [WebInvoke(Method = "POST", UriTemplate = "DoSomething?siteId={siteId}&configTarget={configTarget}", 
      RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
      bool DoSomething(string itemid, Stream body); 


    public bool DoSomething(int siteId, string configTarget, Stream postData) 
    { 
     string data = new StreamReader(postData).ReadToEnd(); 
     return data.Length > 0; 
    } 

Voir ce lien pour plus de détails: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

+0

Merci James, votre message m'a aidé à faire réparer mon problème. J'essayais de créer le service Rest WCF qui sera demandé avec le type de contenu 'application/x-www-form-urlencoded' et les données affichées dans le corps de la requête comme 'clé = valeur & clé = valeur .....'. Je luttais beaucoup pour obtenir cette structure prête pour intégrer mon application avec des services de tiers (qui appellera mon service avec toutes ces spécifications) .... – Shaggy