C # construit une méthode websevice qui accepte les méthodes POST comme la méthode HttpWebRequest

J’ai besoin d’un service Web qui accepte les méthodes POST. Un serveur qui m’accède utilise la méthode POST. Il m’envoie un XML et je devrais répondre avec du XML.

Dans l’autre cas, lorsque j’ai access à lui, j’ai réussi avec la classe HttpWebRequest et cela fonctionne bien. C’est fait comme:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(s.strMvrataUrl.ToSsortingng()); req.ClientCertificates.Add(cert); req.Method = "POST"; req.ContentType = "text/xml; encoding='utf-8'"; s.AddToLog(Level.Info, "Certifikat dodan."); byte[] bdata = null; bdata = Encoding.UTF8.GetBytes(strRequest); req.ContentLength = bdata.Length; Stream stremOut = req.GetRequestStream(); stremOut.Write(bdata, 0, bdata.Length); stremOut.Close(); s.AddToLog(Level.Info, "Request: " + Environment.NewLine + strRequest); StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream()); strResponse = streamIn.ReadToEnd(); streamIn.Close(); 

Maintenant, j’aimerais avoir un service web qui accepte la méthode POST. Est-ce que quelqu’un a une idée de comment faire cela? Je suis coincé ici.

HTTP GET et HTTP POST peuvent être activés dans la configuration. Il existe un fichier appelé fichier webconfig à la racine où vous devez append le paramètre suivant:

           

c’est-à-dire à l’intérieur de la balise system.web.

Désormais, dans le service Web, si vous souhaitez renvoyer un fichier XML, vous pouvez concevoir une structure de votre souhait qui ressemble au code XML anticipé. Exemple: pour obtenir un XML de type suivant:

   Item101 200  

vous devez renvoyer un object de structure suivante à partir du service Web:

 public struct Quote { public int price; public ssortingng object; public Quote(int pr, ssortingng obj) { price = pr; object = obj } } 

Cela peut maintenant être reçu comme réponse sous forme de chaîne, puis analysé à votre guise.

=============================================== =============================

Éditer je

Ce qui suit est un WebMethod HelloWorld

 [WebMethod] public ssortingng HelloWorld() { return "HelloWorld"; } 

[en cas de struct changer le type de retour en type de struct correspondant]

Ce qui suit est une fonction dans laquelle vous pouvez poster un URL et envoyer un fichier XML au Webservice [Utilisez-le selon vos besoins]:

 public static XmlDocument PostXMLTransaction(ssortingng URL, XmlDocument XMLDoc) { //Declare XMLResponse document XmlDocument XMLResponse = null; //Declare an HTTP-specific implementation of the WebRequest class. HttpWebRequest objHttpWebRequest; //Declare an HTTP-specific implementation of the WebResponse class HttpWebResponse objHttpWebResponse = null; //Declare a generic view of a sequence of bytes Stream objRequestStream = null; Stream objResponseStream = null; //Declare XMLReader XmlTextReader objXMLReader; //Creates an HttpWebRequest for the specified URL. objHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL); try { //---------- Start HttpRequest //Set HttpWebRequest properties byte[] bytes; bytes = System.Text.Encoding.ASCII.GetBytes(XMLDoc.InnerXml); objHttpWebRequest.Method = "POST"; objHttpWebRequest.ContentLength = bytes.Length; objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'"; //Get Stream object objRequestStream = objHttpWebRequest.GetRequestStream(); //Writes a sequence of bytes to the current stream objRequestStream.Write(bytes, 0, bytes.Length); //Close stream objRequestStream.Close(); //---------- End HttpRequest //Sends the HttpWebRequest, and waits for a response. objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse(); //---------- Start HttpResponse if (objHttpWebResponse.StatusCode == HttpStatusCode.OK) { //Get response stream objResponseStream = objHttpWebResponse.GetResponseStream(); //Load response stream into XMLReader objXMLReader = new XmlTextReader(objResponseStream); //Declare XMLDocument XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(objXMLReader); //Set XMLResponse object returned from XMLReader XMLResponse = xmldoc; //Close XMLReader objXMLReader.Close(); } //Close HttpWebResponse objHttpWebResponse.Close(); } catch (WebException we) { //TODO: Add custom exception handling throw new Exception(we.Message); } catch (Exception ex) { throw new Exception(ex.Message); } finally { //Close connections objRequestStream.Close(); objResponseStream.Close(); objHttpWebResponse.Close(); //Release objects objXMLReader = null; objRequestStream = null; objResponseStream = null; objHttpWebResponse = null; objHttpWebRequest = null; } //Return return XMLResponse; } 

Et l’appel serait comme:

  XmlDocument XMLdoc = new XmlDocument(); XMLdoc.Load(""); XmlDocument response = PostXMLTransaction("", XMLdoc); ssortingng source = response.OuterXml; 

[Si cela vous a aidé ou si vous avez besoin de plus d’aide, faites-le moi savoir]

De http://support.microsoft.com/kb/819267 :

HTTP GET et HTTP POST peuvent être activés en modifiant le fichier Web.config pour le vroot où réside le service Web. La configuration suivante active HTTP GET et HTTP POST: