Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/01/2014, 14:02
Avatar de Namiwis
Namiwis
 
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: DLL que consuma un web service

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.