net example consumir consume c# .net soap http-post envelope

example - Objeto SOAP sobre la publicación HTTP en C#.NET



vb net consume soap web service (2)

Primero necesitas crear un XML válido. Yo uso Linq en XML para lograr esto, como sigue:

XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/"; var document = new XDocument( new XDeclaration("1.0", "utf-8", String.Empty), new XElement(soapenv + "Envelope", new XAttribute(XNamespace.Xmlns + "soapenv", soapenv), new XElement(soapenv + "Header", new XElement(soapenv + "AnyOptionalHeader", new XAttribute("AnyOptionalAttribute", "false"), ) ), new XElement(soapenv + "Body", new XElement(soapenv + "MyMethodName", new XAttribute("AnyAttributeOrElement", "Whatever") ) ) );

Luego lo envío utilizando ( EDITAR : agregó XDocument.ToString() aquí).

var req = WebRequest.Create(uri); req.Timeout = 300000; //timeout req.Method = "POST"; req.ContentType = "text/xml;charset=UTF-8"; using (var writer = new StreamWriter(req.GetRequestStream())) { writer.WriteLine(document.ToString()); writer.Close(); }

Si tengo que leer alguna respuesta, lo hago (este es el seguimiento del código anterior):

using (var rsp = req.GetResponse()) { req.GetRequestStream().Close(); if (rsp != null) { using (var answerReader = new StreamReader(rsp.GetResponseStream())) { var readString = answerReader.ReadToEnd(); //do whatever you want with it } } }

Intento redactar un mensaje SOAP (incluido el encabezado) en C # .NET para enviarlo a una URL mediante una publicación HTTP. La URL a la que quiero enviarla no es un servicio web, solo recibe mensajes SOAP para eventualmente extraer información de ella. ¿Alguna idea sobre cómo hacer esto?


su código anterior faltaba un paréntesis y tenía una coma adicional, lo arreglé aquí:

XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/"; var document = new XDocument( new XDeclaration("1.0", "utf-8", String.Empty), new XElement(soapenv + "Envelope", new XAttribute(XNamespace.Xmlns + "soapenv", soapenv), new XElement(soapenv + "Header", new XElement(soapenv + "AnyOptionalHeader", new XAttribute("AnyOptionalAttribute", "false") ) ), new XElement(soapenv + "Body", new XElement(soapenv + "MyMethodName", new XAttribute("AnyAttributeOrElement", "Whatever") ) ) ) );