Spanish [Solucionado] "Internal Server Error" en webservice .asmx

josejad

Expert
Licensed User
Longtime User
Hola. Puedes poner tu código, y un enlace al servicio web que estás consumiendo? Estás usando okhttputils2?
 

hatzisn

Well-Known Member
Licensed User
Longtime User
If you are sending in the web service the character '&' then use the stringutils to url encode what you send.
 

Xicu

Active Member
Licensed User
Longtime User
Siguiendo el tutorial de web service, me da el error interno,

Para los que os incorporais a este hilo, esta pregunta proviene de:
https://www.b4x.com/android/forum/t...ebservice-tipo-asp-net-asmx.45107/post-714701

Felix-666, deberias poder detallarnos el tipo de "internal error" que esta recibiendo en JobDone. Ejecuta en modo de depuracion (debug) y analiza el valor de Job.errormessage. Aqui deberia aparecer la descripcion detallada del error.

Aprovecho para comentarte que el tutorial necesita ser actualizado ya que como comenta Jose J.Aguilar actualmente deberiamos utilizar okhttputils2. (Cuando tenga un hueco intentare actualizarlo).
En mis aplicaciones b4a siempre me decante por utilizar el protocolo http post al ser mas sencillo de habilitar que el protocolo soap. Y utilizando un puerto diferente al 80, no he tenido problemas.
 

Felix.666

Member
Licensed User
Para los que os incorporais a este hilo, esta pregunta proviene de:
https://www.b4x.com/android/forum/t...ebservice-tipo-asp-net-asmx.45107/post-714701

Felix-666, deberias poder detallarnos el tipo de "internal error" que esta recibiendo en JobDone. Ejecuta en modo de depuracion (debug) y analiza el valor de Job.errormessage. Aqui deberia aparecer la descripcion detallada del error.

Aprovecho para comentarte que el tutorial necesita ser actualizado ya que como comenta Jose J.Aguilar actualmente deberiamos utilizar okhttputils2. (Cuando tenga un hueco intentare actualizarlo).
En mis aplicaciones b4a siempre me decante por utilizar el protocolo http post al ser mas sencillo de habilitar que el protocolo soap. Y utilizando un puerto diferente al 80, no he tenido problemas.
Buenos Dias,
el error de Job.errormessage es : "Internal Server Error", Siguiendo la recomendación de: Jose J.Aguilar cambie las librerias a okhttputils2, y el error ha cambiado
el codigo usado es el del tutorial de Xicu, cambiado la URL, estoy preparando un ejemplo del servicio para mandarlo.

un Saludo: Felix.666
 

Attachments

  • IMG_20200229_095640.jpg
    IMG_20200229_095640.jpg
    248.2 KB · Views: 195

Xicu

Active Member
Licensed User
Longtime User
Felix.666, tu pregunta inicial era: "estoy probando los webservice, y cuando es por puerto 80, no hay problemas, pero para consumir un webservice por otro puerto ej. 8091, da siempre error interno de servidor"

He probado tu codigo (falta encabezado) con mi servidor

B4X:
XML = XML & "<HelloWorld xmlns='http://www.miweb.com:8091/'>"
XML = XML & "<Nombre>" & Nombre & "</Nombre>"
XML = XML & "</HelloWorld>"
XML = XML & "</soap12:Body>"
XML = XML & "</soap12:Envelope>"
XML = XML.Replace("'", Chr(34))
job1.Initialize("JOBSOAP", Me)
job1.PostString ("www.miweb.com:8091/nombredelwebservice.asmx", XML)

y efectivamente da error el error interno.
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Sender</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">System.Web.Services.Protocols.SoapException: Unable to handle request without a valid action parameter. Please supply a valid soap action.
at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
at System.Web.Services.Protocols.SoapServerProtocol.Init......

Pero quitando el puerto en la linea:
B4X:
XML = XML & "<HelloWorld xmlns='http://www.miweb.com:8091/'>"

funciona correctamente

Por tanto tu codigo completo deberia quedar asi:

B4X:
Sub ConsumirServicioSOAP(Nombre As String)
    Dim job1 As HttpJob
    Dim XML As String
    XML = ""
    XML = XML & "<?xml version='1.0' encoding='utf-8'?>"
    XML = XML & "<soap12:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap12='http://www.w3.org/2003/05/soap-envelope'>"
    XML = XML & "<soap12:Body>"
    XML = XML & "<HelloWorld xmlns='http://www.miweb.com/'>"
    XML = XML & "<Nombre>" & Nombre & "</Nombre>"
    XML = XML & "</HelloWorld>"
    XML = XML & "</soap12:Body>"
    XML = XML & "</soap12:Envelope>"
    XML = XML.Replace("'", Chr(34))
    job1.Initialize("JOBSOAP", Me)

    job1.PostString ("http://miweb.com:8091/Saljub.asmx", XML)
    job1.GetRequest.SetContentType("application/soap+xml")
End Sub
 
Last edited:

Felix.666

Member
Licensed User
Felix.666, tu pregunta inicial era: "estoy probando los webservice, y cuando es por puerto 80, no hay problemas, pero para consumir un webservice por otro puerto ej. 8091, da siempre error interno de servidor"

He probado tu codigo (falta encabezado) con mi servidor

B4X:
XML = XML & "<HelloWorld xmlns='http://www.miweb.com:8091/'>"
XML = XML & "<Nombre>" & Nombre & "</Nombre>"
XML = XML & "</HelloWorld>"
XML = XML & "</soap12:Body>"
XML = XML & "</soap12:Envelope>"
XML = XML.Replace("'", Chr(34))
job1.Initialize("JOBSOAP", Me)
job1.PostString ("www.miweb.com:8091/nombredelwebservice.asmx", XML)

y efectivamente da error el error interno.


Pero quitando el puerto en la linea:
B4X:
XML = XML & "<HelloWorld xmlns='http://www.miweb.com:8091/'>"

me funciona correctamente

Por tanto tu codigo completo deberia quedar asi:

B4X:
Sub ConsumirServicioSOAP(Nombre As String)
    Dim job1 As HttpJob
    Dim XML As String
    XML = ""
    XML = XML & "<?xml version='1.0' encoding='utf-8'?>"
    XML = XML & "<soap12:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap12='http://www.w3.org/2003/05/soap-envelope'>"
    XML = XML & "<soap12:Body>"
    XML = XML & "<HelloWorld xmlns='http://www.miweb.com/'>"
    XML = XML & "<Nombre>" & Nombre & "</Nombre>"
    XML = XML & "</HelloWorld>"
    XML = XML & "</soap12:Body>"
    XML = XML & "</soap12:Envelope>"
    XML = XML.Replace("'", Chr(34))
    job1.Initialize("JOBSOAP", Me)

    job1.PostString ("http://miweb.com:8091/Saljub.asmx", XML)
    job1.GetRequest.SetContentType("application/soap+xml")
End Sub
Tienes razón xicu, en un principio, me funciona en el puerto 80 (httputils2), pero empece a retocar el programa, y despues de tantas pruebas, tanto en el webservice como en el b4a, ya no tiraba de ninguna manera, suele pasar cuando empiezas a mezclar codigo de un sitio y de otro.

He probado tu solución, y va perfecto, gracias por la ayuda prestada, y por el interes demostrado por ti, y por los demas mienbros del forum.

Gracias.
 
Last edited:

Xicu

Active Member
Licensed User
Longtime User
He probado tu solución, y va perfecto, gracias por la ayuda prestada, y por el interes demostrado por ti, y por los demas mienbros del forum.
Me alegro!.
Si no te sabe mal, edita el titulo del hilo y ponle [Solucionado] para asi facilitar la busqueda a los demas.
 
Top