Yo lo hago con SoapRequest y SoapResponse, algo así.
Creas el SoapRequest
Código:
HttpWebRequest request = CreateWebRequest();
XmlDocument soapEnvelopeXml = new XmlDocument();
soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><soap:Body><CelsiusToFahrenheit xmlns=""http://www.w3schools.com/webservices/""><Celsius>" + Celsius+ "</Celsius></CelsiusToFahrenheit ></soap:Body></soap:Envelope>");
Código:
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
Consumes
Código:
//Obtengo la respuesta del SoapRequest
using (WebResponse response = request.GetResponse())
{
//Proceso la respuesta
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
//Cacho toda la respuesta en bruto y la meto en una variable String
string soapResult = rd.ReadToEnd();
//Meto la respuesta string en un documento tipo XML.
XmlDocument RespuestaSoap = new XmlDocument();
RespuestaSoap.LoadXml(soapResult);
//Aqui obtengo los valores de la respuesta para enviarlos, debo separarlos!!
XmlNodeList TPruebaResult = RespuestaSoap.GetElementsByTagName("CelsiusToFahrenheitResult");
//Cierro el StreamReader
rd.Close();
}
}
Y listo ya procesas tu respuesta, se me hace una manera limpia y facil de consumirla, para armar el SoapRequest debes guiarte del WSDL proporcionado del WebService
CLASE WebResquest
Código:
public HttpWebRequest CreateWebRequest()
{
//Aqui apunto hacia la URL
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"http://www.w3schools.com/webservices/tempconvert.asmx");
webRequest.Headers.Add(@"SOAP:Action");
//Codificacion de la peticion debe ser UTF8 para no tener problemas con el XML.
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
//Metodo de envio en este caso sera POST.
webRequest.Method = "POST";
return webRequest;
}
Este ejemplo fue armado de un WebService publico, normalmente la información para armar tu SoapRequest la encuentras en el WSDL
http://www.w3schools.com/webservices/tempconvert.asmx
Espero te sirva
Saludos.