Page 1 of 2

FWHX y Webservers

Posted: Thu Jul 17, 2008 1:10 pm
by jose_murugosa
Necesito enviar lo siguiente a un web server:

Code: Select all

olicitud: 

POST /inacapi/cargartablas.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://Server/inacapi/cargartablas/Producer"

<?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>
    <Producer xmlns="http://Server/inacapi/cargartablas">
      <Producers>
        <Producer>
          <ProducerCode>int</ProducerCode>
          <ProducerName>string</ProducerName>
          <ProducerRUC>long</ProducerRUC>
          <DepartmentCode>int</DepartmentCode>
          <RegType>int</RegType>
        </Producer>
        <Producer>
          <ProducerCode>int</ProducerCode>
          <ProducerName>string</ProducerName>
          <ProducerRUC>long</ProducerRUC>
          <DepartmentCode>int</DepartmentCode>
          <RegType>int</RegType>
        </Producer>
      </Producers>
    </Producer>
  </soap:Body>
</soap:Envelope>
a fin de recibir esta respuesta:

Code: Select all

Respuesta:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?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>
    <ProducerResponse xmlns="http://Server/inacapi/cargartablas">
      <ProducerResult>int</ProducerResult>
    </ProducerResponse>
  </soap:Body>
</soap:Envelope>
Alguien ha trabajado con web servers y me puede ayudar con alguna pista de como hacerlo?

Posted: Thu Jul 17, 2008 2:54 pm
by quique
Con xHabour tienes un excelente ejemplo

xharbour\samples\sitesvr\

yo hice un servidor web http://ftp.quiquesoft.com/webserv.zip y me basé en el, fivewin tiene

fwh\source\classes\twebserv.prg

tal vez alguno de los dos te de una idea, xharbour también tiene una una librería, creo que es GTCGI, la cual toda la salida la manda como salida para web, es excelente para crear CGIs sin tener que preocuparte tu por ello.

Posted: Thu Jul 17, 2008 8:41 pm
by jose_murugosa
[quote="quique"]Con xHabour tienes un excelente ejemplo

xharbour\samples\sitesvr\

yo hice un servidor web http://ftp.quiquesoft.com/webserv.zip y me basé en el
[quote]

No he podido bajar este archivo, quisieras por favor publicar un nuevo link.

Gracias desde ya, y por responder a mi post.

Posted: Thu Jul 17, 2008 9:09 pm
by quique
perdón, me equivoque, es ftp, no http

ftp://ftp.quiquesoft.com/webserv.zip

Re: FWHX y Webservers

Posted: Wed Sep 03, 2008 1:54 pm
by clemerson
jose_murugosa,

conseguiu funcionar ?
jose_murugosa wrote:Necesito enviar lo siguiente a un web server:

Code: Select all

olicitud: 

POST /inacapi/cargartablas.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://Server/inacapi/cargartablas/Producer"

<?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>
    <Producer xmlns="http://Server/inacapi/cargartablas">
      <Producers>
        <Producer>
          <ProducerCode>int</ProducerCode>
          <ProducerName>string</ProducerName>
          <ProducerRUC>long</ProducerRUC>
          <DepartmentCode>int</DepartmentCode>
          <RegType>int</RegType>
        </Producer>
        <Producer>
          <ProducerCode>int</ProducerCode>
          <ProducerName>string</ProducerName>
          <ProducerRUC>long</ProducerRUC>
          <DepartmentCode>int</DepartmentCode>
          <RegType>int</RegType>
        </Producer>
      </Producers>
    </Producer>
  </soap:Body>
</soap:Envelope>
a fin de recibir esta respuesta:

Code: Select all

Respuesta:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?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>
    <ProducerResponse xmlns="http://Server/inacapi/cargartablas">
      <ProducerResult>int</ProducerResult>
    </ProducerResponse>
  </soap:Body>
</soap:Envelope>
Alguien ha trabajado con web servers y me puede ayudar con alguna pista de como hacerlo?

Posted: Wed Sep 03, 2008 2:23 pm
by Antonio Linares
Jose,

Basándome en las pruebas que he hecho hoy y que he publicado en:

http://forums.fivetechsoft.com/viewtopic.php?t=12514

creo que usar el activex "shell.explorer" puede ser el camino más sencillo y rápido para hacerlo :-)

Posted: Wed Sep 03, 2008 2:39 pm
by clemerson
sabe se funciona com HTTPS ?

https://200.214.130.41:9443/farmaciahomologa/services

Clemerson
Antonio Linares wrote:Jose,

Basándome en las pruebas que he hecho hoy y que he publicado en:

http://forums.fivetechsoft.com/viewtopic.php?t=12514

creo que usar el activex "shell.explorer" puede ser el camino más sencillo y rápido para hacerlo :-)

Posted: Wed Sep 03, 2008 8:56 pm
by Antonio Linares
Clemerson,

Estamos haciendo pruebas. Por favor revisa los nuevos posts en:

http://forums.fivetechsoft.com/viewtopic.php?t=12514

Re: FWHX y Webservers

Posted: Thu Sep 04, 2008 8:30 am
by thefull
Lo que estas intentado enviar es a traves de un protocolo conocido como SOAP.

Tienes 2 caminos.
1.- Sencillo, usando un ActiveX de SOAP de M$. Busca en los foros sobre SOAP. La respuesta tambien ya tendrias simplemente un xml.

2.- Montas tu todo a traves de DOM, mucho mas laborioso, porque tu eres el encargado de construir el protocolo SOAP.
La respuesta TAMBIEN deberias tratarla y quitar del XML todo rastro del protocolo SOAP.

Lo que me extraña es que no te hallan informado sobre que method del WebService tienes que ejecutar y que WSDL tienes que apuntar.

Eso es lo primero que deberías saber, URL a donde apuntar y method( Parametro ) que ejecutarás.

Posted: Thu Sep 04, 2008 9:35 am
by Antonio Linares
Clemerson,

Esta funcionando correctamente con HTTPS :-)

Por favor revisa los nuevos posts en:
http://forums.fivetechsoft.com/viewtopic.php?t=12514

Posted: Thu Sep 04, 2008 10:30 am
by thefull
Antonio Linares wrote:Clemerson,

Esta funcionando correctamente con HTTPS :-)

Por favor revisa los nuevos posts en:
http://forums.fivetechsoft.com/viewtopic.php?t=12514
Al igual meto la pata, pero ¿ esto que tiene que ver con Web Services y la pregunta inicial ?

Los links apuntan a usar el Shell.Explorer de Windows.....

Posted: Thu Sep 04, 2008 12:46 pm
by Antonio Linares
Rafa,

Lo que hemos estado investigando es como enviar información a servidores seguros (y no seguros) desde una aplicación en FWH y a como poder recoger respuestas de dichos servidores, usando el Shell.Explorer.

Según la wikipedia, estaría dentro de los "WebServices" :-)

"A 'Web service' (also Web Service) is defined by the W3C as "a software system designed to support interoperable machine-to-machine interaction over a network""

Posted: Thu Sep 04, 2008 10:12 pm
by thefull
Pero si te fijas , el protocolo es SOAP, o al menos, creo entenderlo asi.
¿ Quieres decir que el shell.explorer usa SOAP para la comunicacion ? Déjame que lo dude ;-)

De todas maneras, creo que la pregunta inicial no es muy especifica...

Posted: Thu Sep 04, 2008 11:13 pm
by Antonio Linares
Rafa,

Podrías mostrarnos algún ejemplo sencillo de uso de SOAP ?

Es algo que seguro te agradeceríamos muchos :-)

Gracias!

Posted: Fri Sep 05, 2008 8:37 pm
by thefull
Antonio Linares wrote:Rafa,

Podrías mostrarnos algún ejemplo sencillo de uso de SOAP ?

Es algo que seguro te agradeceríamos muchos :-)

Gracias!
Antonio, creo que por los foros ya se reportaron la implementación de SOAP, tanto usando el SDK de M$ como a pelo.

No tiene ningun misterio, es tan sencillo como realizar una llamada a un method de una clase cualquiera, pero... aqui esta la gracia, la ejecucion de ese method es realizado en el servidor, que te brinda ese servicio, por eso el nombre del Web Services, es decir, Servicios Web.

SOAP unicamente es un protocolo, al igual que el RCP, que lo único que hace es envolver nuestro XML.

Imaginar que 'alguien' nos informa que disponemos de un WebServices, que lo que hace es brindarnos la oportunidad de sumar 2 numeros. ( Es un ejemplo )

Nosotros lo único que tenemos que hacer será;

1.- Crear el objeto Soap Client.
oSoapClient := CreateObject( "MSSOAP.SoapClient" )

2.- Inicializarlo. Esto es muy importante, y fijaos al final.
oSoapclient.MsSoapInit("http://www.uno.es/WebService/suma.php?wsdl")

3.- Mensaje que enviaremos al servidor
cXml := <?xml version="1.0" encoding="UTF-8"?>
<PETICION id="SUMA">
<LPARAMS>
<PARAM id="NUMBER1" tipo="int" valor=10/>
<PARAM id="NUMEBR2" tipo="int"valor=5 ></PARAM>
</LPARAMS>
</PETICION>


Ahora por arte de magia, tenemos un objeto que nos permite llamar a methods que serán ejecutados por el SERVIDOR WEB!
Esto es tremendo;

cResultado := oSoapClient:Suma( cXml )

Es decir, en la parte servidora , puede ser que este realizado con PHP , JAVA, etc... sabe que tiene que ejecutar el method SUMA y los parametros vienen dados en el XML.

Desconozco si es posible hacer;
oSoapClient:Suma( 10, 5 ), ya lo preguntaré, porque contra los que he conectado son a traves de paso de parametros simpre en formato XML.

Esto es asi de simple realizandolo a traves de SDK SOAP de M$.
El problema es que los señores de M$ les a dado por no dar más soporte al protocolo SOAP, nativamente, pero si que lo dan a traves de .NET.

En este post, se puede observar otra manera de usar el protocolo SOAP, usando DOMDocument y XMLHTTP
http://www.fivetechsoft.com/forums/view ... light=soap

Os dejo un extracto;
doc = CreateObject("MSXML2.DOMDocument")
http = CreateObject("MSXML2.XMLHTTP")
http.Open("POST", "http://desweb1:8001/portafolio/portafolio", .F.)
http.SetRequestHeader("SOAPAction", "enviaArchivoWebService")
http.SetRequestHeader("Content-Type", "text/xml")

**carga el archivo

xml = fnArmaCadXml("A", "0091", "XXXX", "142", lcInFile64, "CDDEmbargoM5.htm")

doc.LoadXML(xml)

http.Send(doc.xml)

res = CreateObject("MSXML2.DOMDocument")
response = http.responseText

Como podeis observar, la complejidad de la segunda opcion,
si habeis visto el enlace, no resulta del todo fácil, más bien,
es un tremendo engorro.

¿ A quedado un pelín más claro, alguna duda ?