Acceso a metodos de Web services

970 views
Skip to first unread message

ANDRES

unread,
Apr 29, 2013, 7:49:06 AM4/29/13
to publice...@googlegroups.com
Buen día gente, me encuentro en un problema del cual no encuentro solución.  Estoy accediendo a un WS a través de SOAP pero no puedo llegar a los métodos del mismo. Les agradecería si alguien me puede orientar. Desde ya muchas gracias y les dejo el código fuente para que pueda servir como guía de mi duda. Saludos.-


LOCAL loSoapClient, loSoapClientUrl, lnResult
 DIMENSION taResultado[5]
 lnResult=0
 
 TRY 
  loSoapClient   = CREATEOBJECT("MSSOAP.SoapClient30")
  loSoapClientUrl  = [url del web service]
  
  IF VARTYPE(loSoapClient)=='O'
loSoapClient.MSSoapInit(loSoapClientUrl)
  ENDIF  
 CATCH TO loError
  tcError="Error:"+loError.message
  MESSAGEBOX(tcError)
 ENDTRY 

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Apr 29, 2013, 6:36:13 PM4/29/13
to publice...@googlegroups.com
Hola, lo primero que tienes que hacer es registrar el SOAP la dirección de tu webservice y ahí te da un código  pero si no aquí te paso mi código de como lo hago y ademas creo un cursor consumiendo WebService.

*------Ejemplo para consumir un webservice--------------* 
*------jecutar una consulta y como resultado obtener un cursor 
LOCAL loWSPrueba AS "XML Web Service"
LOCAL loException, lcErrorMsg, loWSHandler
TRY
loWSPrueba = CREATEOBJECT("MSSOAP.SoapClient30")
* Llamo al metodo que cree en el Web Service
oXML = loWSPrueba.validasifacon([1745896745001],[lk8a6a])
SET STEP ON 
IF VARTYPE(oXML.item(1).firstChild)="O" &&Verifico si se creo el objeto oXML 
* Convierto el Dataset a Cursor VFP 
XMLTOCURSOR(oXML.item(1).firstChild.xml,"TmpClienteFactura") 
ENDIF
CATCH TO loException
lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
DO CASE
CASE VARTYPE(loWSPrueba)#"O"
lcErrorMsg = "Falla de conexion al Web Service"
CASE !EMPTY(loWSPrueba.FaultCode)
* SOAP error al llamar al metodo
lcErrorMsg=lcErrorMsg+CHR(13)+loWSPrueba.Detail
OTHERWISE
* Otros errores
ENDCASE
MESSAGEBOX(lcErrorMsg,16,"Error...")
FINALLY
* si todo esta bien hacemos un browse a nuestro cursor
IF USED("TmpClienteFactura")
SELECT TmpClienteFactura
BROWSE 
ENDIF 
ENDTRY


Cualquier duda me escribes a mi correo.

Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com 


andres recio

unread,
Apr 30, 2013, 7:57:00 AM4/30/13
to publice...@googlegroups.com
Muchas gracias jesus, mi problema es  q no puedo acceder a los metodos del WS, voy a ver si hoy me junto con la persona q lo hizo a ver si me da una mano. Cualquier cosa despues te paso la url del WS a ver si me podes orientar. Muchas gracias.-

Pablo Daniel Lissa

unread,
Apr 30, 2013, 9:14:44 AM4/30/13
to publice...@googlegroups.com
Hola Andrés:

Primero, te diría que deberías poner cuál es el mensaje de error que te aparece y cuál es la línea que lo arroja. Por ejemplo, en tu fragmento de código no se muestra que llames al método, así que podría suponer que es en la línea del método MSSoapInit.

Lo que sí te puedo contar, en base a lo que me ha pasado a mí, es que tuve que agregar una línea antes de invocar a MSSoapInit:
        loSoapClient.ClientProperty("ServerHTTPRequest") = .T.

Espero que te sirva.

Éxitos. Saludos.

andres recio

unread,
Apr 30, 2013, 10:01:46 AM4/30/13
to publice...@googlegroups.com
muchas gracias pablo...ahora lo pruebo....

Xerion

unread,
Apr 30, 2013, 11:48:57 AM4/30/13
to publice...@googlegroups.com

A este procedimiento se le pasa el xml(Request), la url del servicio web y el soapaction que es el método
y con esto no vas a tener ningun problema en consumir servicios web
 Llevaba mucho tiempo investigando este tema y ahora esta solucionado

***--------------------------------
PROCEDURE LLAMA_WEBSERVICE
***--------------------------------
PARAMETERS P_REQUEST,P_URL, P_SOAPACTION

LOCAL LS_RESPONSE
LS_RESPONSE = ""
TRY 
oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
oHTTP.OPEN("POST",P_URL, .f.)
oHTTP.setRequestHeader("Content-Type","text/xml; charset=utf-8")
oHTTP.setRequestHeader("Content-Length","length")
oHTTP.setRequestHeader("SOAPAction",P_SOAPACTION)
oHTTP.SEND(P_REQUEST)

CATCH 
LS_RESPONSE = " "
ENDTRY 

L_RESPONSE = oHTTP.responseText

RETURN L_REQUEST

andres recio

unread,
May 3, 2013, 8:37:09 AM5/3/13
to publice...@googlegroups.com
bueno vuelvo con la consulta..... el WS que quiero consumir esta hecho en .Net con WCF....un dato mas para agregar...espero q me pueda ayudar.Saludos.-

Pablo Daniel Lissa

unread,
May 4, 2013, 4:12:30 PM5/4/13
to publice...@googlegroups.com
Andrés:

Vuelvo a insistir. Postea el mensaje de error que te aparece. Nadie tiene la bola de cristal (o eso creo, sino me avisan).

Si el Web Service es WCF, ¿cómo termina la URL que usas para tratar de consumirlo? Debería ser algo como "svc?wsdl".

Saludos.
Reply all
Reply to author
Forward
0 new messages