visual studio example create crear consumir c# web-services soap asmx

studio - ¿Cómo enviar/recibir solicitud y respuesta SOAP usando C#?



create soap web service c# (1)

private static string WebServiceCall(string methodName) { WebRequest webRequest = WebRequest.Create("http://localhost/AccountSvc/DataInquiry.asmx"); HttpWebRequest httpRequest = (HttpWebRequest)webRequest; httpRequest.Method = "POST"; httpRequest.ContentType = "text/xml; charset=utf-8"; httpRequest.Headers.Add("SOAPAction: http://tempuri.org/" + methodName); httpRequest.ProtocolVersion = HttpVersion.Version11; httpRequest.Credentials = CredentialCache.DefaultCredentials; Stream requestStream = httpRequest.GetRequestStream(); //Create Stream and Complete Request StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII); StringBuilder soapRequest = new StringBuilder("<soap:Envelope xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/""); soapRequest.Append(" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" "); soapRequest.Append("xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//"><soap:Body>"); soapRequest.Append("<GetMyName xmlns=/"http://tempuri.org//"><name>Sam</name></GetMyName>"); soapRequest.Append("</soap:Body></soap:Envelope>"); streamWriter.Write(soapRequest.ToString()); streamWriter.Close(); //Get the Response HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse(); StreamReader srd = new StreamReader(wr.GetResponseStream()); string resulXmlFromWebService = srd.ReadToEnd(); return resulXmlFromWebService; }

Intenté diferentes códigos para enviar / recibir respuestas de jabón, pero todos fallaron con el mismo "The remote server returned an error: (500) Internal Server Error." .

Puedo acceder al mismo servicio usando SoapUI. También puedo invocar el método. Leí en este foro que el motivo por el que recibo el error 500 podría ser un encabezado incorrecto. Verifiqué el encabezado, parece estar bien. Agradecería si alguien puede ayudar.

A continuación se muestra la solicitud SOAP de muestra:

POST /AccountSvc/DataInquiry.asmx HTTP/1.1 Host: abc.def.gh.com Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/GetMyName" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetMyName xmlns="http://tempuri.org/"> <name>string</name> </GetMyName> </soap:Body> </soap:Envelope>

Utilicé la solicitud de muestra anterior para ejecutar el método y funcionó. Aquí está la solicitud de Soap que pasé:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetMyName xmlns="http://tempuri.org/"><name>Sam</name></GetMyName></soap:Body></soap:Envelope>

Editar:

He actualizado el código anterior en WebServiceCall que funcionó para el servicio .asmx. Pero el mismo código no funcionó para el servicio WCF. ¿Por qué?


Las urls son diferentes.

  • http://localhost/AccountSvc/DataInquiry.asmx

vs.

  • /acctinqsvc/portfolioinquiry.asmx

Resuelva este problema primero, como si el servidor web no pudiera resolver la URL a la que intenta enviar, ni siquiera comenzará a procesar las acciones descritas por su solicitud.

Solo debe crear la WebRequest en la URL raíz ASMX, es decir: http://localhost/AccountSvc/DataInquiry.asmx , y especificar el método / operación deseado en el encabezado SOAPAction.

Los valores del encabezado SOAPAction son diferentes.

  • http://localhost/AccountSvc/DataInquiry.asmx/ + methodName

vs.

  • http://tempuri.org/GetMyName

¿Debería poder determinar la correcta SOAPAction yendo a la URL ASMX correcta y anexando ?wsdl

Debería haber una etiqueta <soap:operation> debajo de la etiqueta <wsdl:operation> que coincida con la operación que está intentando ejecutar, que parece ser GetMyName .

No hay declaración XML en el cuerpo de la solicitud que incluya su XML SOAP.

Especifica text/xml en ContentType de su HttpRequest y no charset. Tal vez esto us-ascii defecto, ¡pero no se sabe si no los está especificando!

El XML creado por SoapUI incluye una declaración XML que especifica una codificación de utf-8, que también coincide con el tipo de contenido proporcionado a la solicitud HTTP, que es: text/xml; charset=utf-8 text/xml; charset=utf-8

¡Espero que ayude!