c# - servidor - server did not recognize the value of http header soapaction php
El servidor no reconoció el valor de SOAPAction del encabezado HTTP (15)
Al llamar al servicio web .asmx / wcf, tenga en cuenta los siguientes puntos:
- El espacio de nombres distingue entre mayúsculas y minúsculas, la solicitud SOAP DEBE enviarse con el mismo espacio de nombres con el que se declara WebService.
por ejemplo, para el servicio web declarado como se muestra a continuación
[WebService(Namespace = "http://MyDomain.com/TestService")]
public class FooClass : System.Web.Services.WebService
{
[WebMethod]
public bool Foo( string name)
{
......
}
}
La solicitud SOAP debe mantener el mismo caso para el espacio de nombres durante la llamada. En algún momento pasamos por alto la sensibilidad de mayúsculas y minúsculas.
<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>
<Foo xmlns="http://MyDomain.com/TestService">
<name>string</name>
</Foo>
</soap:Body>
</soap:Envelope>
- El espacio de nombres no necesita ser el mismo que el URL del servicio. El espacio de nombres puede ser cualquier cadena.
por ejemplo, el servicio anterior puede estar alojado en http://84.23.9.65/MyTestService , pero aún mientras se invoca el servicio web del cliente, el espacio de nombres debe ser el mismo que el de la clase de serice, es decir, http://MyDomain.com/TestService.
[SoapRpcMethod(Action = "http://cyberindigo/TempWebService/InsertXML",
RequestNamespace = "http://cyberindigo/TempWebService/Request",
RequestElementName = "InsertXMLRequest",
ResponseNamespace = "http://cyberindigo/TempWebService/Response",
ResponseElementName = "InsertXMLResponse",
Use = System.Web.Services.Description.SoapBindingUse.Literal)]
[WebMethod]
public string InsertXML(string Jobs)
{
return "Hi";
}
El Problema cuando estoy accediendo a él usando XMLHttpRequest da el siguiente error El servidor no reconoció el valor de la cabecera HTTP SOAPAction: http: // Cyberindigo / TempWebService / InsertXML
Decidí publicar mi propia respuesta aquí porque perdí algunas horas y creo que, aunque la respuesta aceptada es muy buena y me indicó la dirección correcta (sí, recibió un voto), fue no lo suficientemente detallado como para explicar lo que estaba mal con mi solicitud, al menos en mi caso.
Estoy ejecutando un módulo BPEL en OpenESB 2.2 y el caso de prueba de mi aplicación compuesta estaba fallando con el siguiente error:
Caused by: System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: .
Después de investigar, noté que el WSDL externo tiene todas las pistas que necesitamos para solucionar este problema, por ejemplo, estoy usando el siguiente servicio web para validar un número de tarjeta de crédito a través de una orquestación de servicios web: http://www.webservicex.net/CreditCard.asmx?WSDL
Si comprueba los elementos de <wsdl:operation
verá que indica claramente la soapAction
para esa operación:
<wsdl:binding name="CCCheckerSoap" type="tns:CCCheckerSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="ValidateCardNumber">
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
...
Pero, una vez que crea la aplicación compuesta y crea el proyecto con el BPEL que invoca este servicio WSDL externo, por algún motivo (¿error?), El XML del enlace del conjunto de servicio de aplicación compuesto (CASA) se genera con un parámetro soapAction
vacío:
<binding name="casaBinding1" type="ns:CCCheckerSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ValidateCardNumber">
<soap:operation soapAction="" style="document"/>
<input>
<soap:body use="literal"/>
</input>
Una vez que haya copiado el soapAction adecuado (http://www.webservicex.net/ValidateCardNumber) en este parámetro, el Caso de prueba de la aplicación aparecerá correctamente y devolverá la respuesta Soap esperada.
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
Entonces, es una solución más específica que decidí documentar en base a la información que se encuentra en esta publicación de blog: http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/ .
Significa (al menos en mi caso) que está accediendo a un servicio web con SOAP y pasando un parámetro SOAPAction en la solicitud HTTP que no coincide con lo que el servicio espera .
Estoy de acuerdo con Sam en que la definición de SOAP no coincide con lo que se espera. Aquí hay solo UNA solución, podría tener que resolver manualmente este error:
Mi problema fue que cambié el nombre del método web pero no cambié el "MessageName" en la etiqueta de metadatos.
[WebMethod(MessageName = "foo")]
public string bar()
{
}
Debería ser
[WebMethod(MessageName = "foo")]
public string foo()
{
}
espero que ayude a alguien
Hemos cambiado el nombre de algunos de los espacios de nombres de nuestro proyecto web y olvidó actualizar la sección de configuración de httphandlers del sitio web con el espacio de nombres de los proyectos renombrados.
La fuente de la siguiente parte de esta publicación es:
http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/
(dado que el OP no quería dar atribución, y gracias a Peter)
Tenga en cuenta que bakert es el autor original del texto, no el OP.
Como no veo nada en Internet, puedo encontrar una explicación de este error. Pensé que compartiría los frutos de mi larga búsqueda de este error.
Significa (al menos en mi caso) que está accediendo a un servicio web con SOAP y pasando un parámetro SOAPAction en la solicitud HTTP que no coincide con lo que el servicio espera.
Me metí en un aprieto porque movimos un servicio web de un servidor a otro y así cambié el "espacio de nombres" (no me confundas entre espacios de nombres de servicio web y .net) en el archivo C # llamante para que coincida con el nuevo servidor. Pero al servidor no le importa la realidad web real de http //yournamespace.com/blah, solo le importa que le envíe lo que ha dicho que espera en el servidor. No importa si hay algo allí o no.
Así que, básicamente, el servicio web se movió de http: //foo.com/servicename a http: //bar.com/servicename, pero el "espacio de nombres" del servicio web se mantuvo como http: //foo.com/servicename porque nadie lo cambió
¡Y eso solo tardó aproximadamente 4 horas en resolverse!
Si tiene un problema similar pero no puede resolver lo que estoy diciendo aquí, siéntase libre de enviarme un correo electrónico a [email protected]. ¡No le deseo mis cuatro horas a nadie!
Mi error solucionado por la respuesta del Sr. John Saunders: http://forums.asp.net/post/2906487.aspx
en resumen: diferencia entre Namespace de ws .asmx.cs con archivos ws .wsdl .
1) [WebService(Namespace = "http://tempuri.org/")]
el espacio de nombre del servicio web posterior cambió a:
2) [WebService(Namespace = "http://newvalue.com/")]
así que hicimos referencia (1) en la aplicación y el servicio web es (2) ahora.
hazlos iguales para arreglar tu problema.
Obtuve este error cuando intenté llamar a un método que no existía. Solo existía en una versión más nueva de nuestro servicio web.
Solo para ayudar a alguien en este problema, después de una tarde de depuración, el problema fue que el servicio web se desarrolló con Framework 4.5 y la llamada de Android se debe hacer con SoapEnvelope.VER12 y no con SoapEnvelope.VER11
Tuve el mismo error, pude resolverlo al eliminar la ''Referencia web'' y agregar una ''Referencia de servicio'' en su lugar
Tuve el mismo problema después de cambiar el espacio de nombres de "tempuri" en mi servicio web.
Debe actualizar su referencia de servicio en el proyecto que está consumiendo el servicio anterior, para que pueda obtener las últimas definiciones de SOAP.
O al menos eso funcionó para mí. :)
Tuve el mismo problema, lo arreglé después de algunas comprobaciones:
<< Target WebService Exists pero llamado method''s no eXXXists. >>
mi servicio local contiene métodos, pero el servidor de destino (servidor de conexión) no contiene el método llamado especificado.
Comprueba el escenario de tu programa nuevamente ...
Tuve que ordenar las mayúsculas de mi referencia de servicio, eliminar las referencias y volver a agregarlas para corregir esto. No estoy seguro de si alguno de estos pasos es supersticioso, pero el problema desapareció.
Tuve un problema similar con el mismo mensaje de error:
System.Web.Services.Protocols.SoapException:
servidor no reconoció el valor de SOAPAction
encabezado HTTP:
Utilizamos URL dinámicas en nuestras llamadas al servicio web. Tenemos un servidor de configuración central que administra la ubicación de todas las llamadas al servicio web para que nuestro código pueda ejecutarse en DEV, probar o en vivo sin necesidad de recompilar. La URL para una llamada de servicio web específica para el entorno de prueba era incorrecta en nuestro servidor de configuración. La llamada al servicio web se enviaba al servidor incorrecto y a un servicio web incorrecto.
Por lo tanto, este error simplemente puede ser el resultado de que la solicitud del servicio web no coincida con el servicio web al que se llama.
Se necesitó ejecutar el violín en el servidor de la aplicación web para ver que la llamada real era al servicio web incorrecto.
Tuve un problema similar. Para solucionar el problema, Wireshark y Wireshark solicitud generada por mi código. Luego utilicé la prueba XML Spy para crear una solicitud SOAP (suponiendo que tienes WSDL) y comparé esos dos.
Esto debería darte una pista de lo que va mal.
el problema está en System.Web.Services.Protocols.SoapDocumentMethodAttribute en el servicio. Compruébelo por favor. puede haber cambiado