Sunteți pe pagina 1din 14

Habilitando aplicaciones de Visual FoxPro para Internet

Habilitando aplicaciones de Visual FoxPro para Internet


Rick Strahl, West Wind Technologies, 1999
http://www.west-wind.com

Traducido por: Roberto Alfredo Mor

Rehacer vuestras aplicaciones para correr sobre la Web es una manera de


aprovechar las ventajas de Internet, pero es tambin un intenso emprendimiento
que requiere repensar completamente la manera en que trabajan esas
aplicaciones. En muchas situaciones se puede aprovechar la funcionalidad de
Internet a mucho ms bajo nivel simplemente integrando la funcionalidad
especfica en vuestras aplicaciones. Este documento describe varias maneras que
te permitirn construir funcionalidad Internet sobre aplicaciones existentes con
relativamente poco esfuerzo dndote grandes mejoras en la facilidad de uso con
muy poco cdigo.

En este artculo averiguars como:

Acceder a Internet y Windows monikers usando ShellExecute API


Integrar correo electrnico SMTP, FTP y HTTP bsico.
Acceder a archivos de bases de datos sobre un servidor en Internet
Acceder a SQL Server a travs de Internet usando TCP/IP
Usar DCOM sobre Internet y TCP/IP
Usar Microsoft RDS para acceder a datos y objetos COM sobre un servidor Web

Para averiguar ms sobre cmo construir aplicaciones distribuidas sobre HTTP ver
el artculo siguiente: Building distributed applications over HTTP with
wwIPStuff

(Construyendo aplicaciones distribuidas sobre HTTP con wwIPStuff)


Un cliente "gordo" no es del todo malo!

Los clientes "gordos" vienen teniendo una mala fama como una tecnologa
obsoleta que no puede ser escalada. Mientras que esto puede ser cierto, es
tambin un hecho que la vasta mayora de las aplicaciones contina siendo
independientes o son aplicaciones de red que corren en mquinas cliente. Las
aplicaciones comerciales a menudo necesitan la flexibilidad que no pueden tener
sin un entorno de un cliente rico y la funcionalidad de base de datos que usa
funcionalidad local para proveer este entorno.

Un cliente "delgado" est de moda, pero cada vez ms es un propulsor hacia la


construccin de aplicaciones que comparten la lgica y el acceso de datos entre el
cliente y capas de servidor . Yo llamo a esto aplicaciones cliente medianas, que
usan las herramientas de desarrollo tradicionales para implementar aplicaciones
distribuidas que comparten la responsabilidad de la lgica entre el cliente y el
servidor utilizando Internet como una red.

En este contexto, este artculo discute maneras para que puedas aprovechar las
tecnologas de Internet sin abandonar la flexibilidad y la funcionalidad a la que
ests acostumbrado con Visual FoxPro.
Mejorando las aplicaciones existentes.
El primer y ms sencillo paso para la integracin con Internet es la mejora de las
aplicaciones existentes agregando funcionalidades bsicas de Internet:

Incorporando caractersticas menores


Pequeas mejoras de protocolos bsicos de Internet pueden producir grandes
mejoras en la funcionalidad de aplicaciones existentes.
Enlaces a la Web links, correo electrnico, FTP, acceso HTTP
Las aplicaciones pueden aprovechar fcilmente caractersticas como Hyperlinks y
Extensiones de Interfase Windows que son realmente muy fciles de implementar
va la Windows Shell API. El correo electrnico contina siendo una parte
importante del uso de Internet para la mayora de los usuarios y agregar el correo
electrnico puede proveernos de un importante mecanismo de feedback para
informes de estado, notificaciones, manejo de errores y muchas ms
posibilidades. El mover archivos entre diferentes ubicaciones es otra caracterstica
que muchas aplicaciones requieren. Usando servidores de FTP o HTTP para
contener estos archivos y dndole a la gente acceso distribuido puedes hacer que
tus aplicaciones sean mucho ms flexibles y que puedan compartir informacin
con usuarios en cualquier lugar. El acceso HTTP es tambin muy poderoso para
recuperar e interactuar con contenido Web existente. Lo hermoso es que toda esta
funcionalidad puede ser agregada ms o menos fcilmente y con muy poco
cdigo.
Control del Explorador Web
El control del Explorador Web IE inaugura toda una nueva manera de pensar
acerca de una interfase de usuario para las aplicaciones. Primero, el control te
permite agregar un explorador personalizado dentro de tu aplicacin, uno que
puede ser fcilmente conducido por tu aplicacin y completamente controlado por
ella permitindote controlar estrictamente el contenido al que accede el explorador
personalizado. Pero tambin puede servir como un gran mecanismo para mostrar
un rico contenido en una aplicacin y es aun una manera de facilitar el desarrollo
de aplicaciones centradas en la Web que pueden tener que convivir como una
aplicacin independiente en un ordenador (o en un CD) y como una aplicacin
Web accedida puramente a travs de un explorador y un servidor Web.
Usando Internet como una red
Internet ha convertido la idea de una red global en una realidad que tu aplicacin
puede aprovechar. No obstante, con toda la promocin sobre aplicaciones
distribuidas y aplicaciones centradas en servidores Web, no ha habido mucha
discusin acerca del acceso de datos a travs de Internet y de la lgica
conductora de las aplicaciones servidoras desde el cliente.
Accediendo a contenido Web
Uno de los ms poderosos conceptos de Internet es la capacidad de tener
aplicaciones cliente que accedan a contenido Web. Utilizando una aplicacin
cliente rica que se pueda comunicar con servidores a travs de Internet ya sea
para capturar contenido simple o para ejecutar aplicaciones, logras un nuevo nivel
de posibilidades para tu aplicacin. Es realmente muy fcil recoger contenido de
Internet y usarlo como fuente de informacin en tus aplicaciones.
Accediendo a datosSobre la misma lnea, es posible acceder a datos sobre
Internet. TCP/IP es un protocolo estndar de red soportado por Windows y es
posible acceder a datos en Internet como con cualquier otra conexin de red.
Tambin hay maneras de usar herramientas intermedias y componentes que le
pueden dar a tu aplicacin cliente la capacidad de acceder a datos del servidor.
Mostrar algunos ejemplos de esto usando cdigo FoxPro puro, tanto sobre el
servidor como en el cliente, as como del Servicio de Acceso a Datos de Microsoft
(RDS) que provee una funcionalidad muy similar en un componente de sistema.
Construyendo aplicaciones distribuidas con VFP sobre el cliente y el servidor
La Web est motorizada por HTTP. HTTP es un protocolo relativamente simple
para trabajar con l. Con l, es fcil crear aplicaciones complejas que puedan ser
controladas y/o compartidas tanto por el cliente como por el servidor. En este
escenario, las aplicaciones tienen la capacidad de trabajar fuera de lnea o de usar
la Web como una alimentacin viva de datos/contenido. Esto puede relacionarse
ya sea con tu aplicacin corriendo sobre un servidor Web o con cualquier recurso
disponible en Internet. Por ejemplo, es muy fcil "bajar" todo tipo de informacin
como cotizacin de acciones, pronsticos meteorolgicos, noticias, etc., la que
puedes usar para personalizar y mejorar tu aplicacin. Finalmente, puedes
construir una aplicacin verdaderamente distribuida con VFP, donde la aplicacin
del lado cliente controla parte de la lgica y el servidor el resto. La potencia de
este mecanismo es que puedes mezclar y ensamblar tecnologas de cliente y
servidor, o incluso puedes usar clientes VFP "conversando" con servidores VFP a
travs de Internet.
Mejorando aplicaciones existentes.
Comencemos mirando la mejora de las aplicaciones existentes. Cubrir los
siguientes temas:

Shell API
Correo electrnico SMTP
FTP
Programacin bsica para acceso Web
La Shell API

Una de las ms sencillas y poderosas caractersticas del sistema operativo


Windows es la Shell API. Esta API no es especfica de Internet pero provee
atractivas funcionalidades para el uso de Internet. Provee un mecanismo para
"ejecutar" cualquier clase de documento que Windows conozca. Usando esta API
puedes "ejecutar" un documento Word o un archivo .EXE, acceder a una URL en
tu navegador por defecto, forzar a que aparezca una ventana de correo electrnico
o abrir tu editor HTML favorito para editar un documento HTML. La interfase
trabaja a travs de un mecanismo denominado monikers, que es esencialmente la
manera en que Windows interpreta las lneas de comando. Si Windows puede
reconocer un moniker, intentar ejecutarlo de la misma manera que lo hace
cuando haces doble click sobre un documento con una extensin conocida en el
Explorador Windows.

La Shell API est implementada de varias maneras diferentes, la ms simple de


ellas es una llamada API que puedes usar en tus aplicaciones Visual FoxPro. Para
probarla, crea la siguiente funcin:

FUNCTION ShellExec
LPARAMETER lcLink, lcAction, lcParms
lcAction = IIF(EMPTY(lcAction), "Open", lcAction)
lcParms = IIF(EMPTY(lcParms), "", lcParms)
DECLARE INTEGER ShellExecute ;
IN SHELL32.dll ;
INTEGER nWinHandle, ;
STRING cOperation, ;
STRING cFileName, ;
STRING cParameters, ;
STRING cDirectory, ;
INTEGER nShowWindow
DECLARE INTEGER FindWindow ;
IN WIN32API ;
STRING cNull,STRING cWinName
RETURN ShellExecute(FindWindow(0, _SCREEN.caption), ;
lcAction, lcLink, ;
lcParms, SYS(2023), 1)
y prueba los siguientes enlaces (ajusta el paso como sea necesario):

ShellExec("http://www.west-wind.com/")
ShellExec(ftp://ftp.west-wind.com/)

Encontrars que en ambos casos ShellExecute API ejecuta el navegador


actualmente seleccionado por defecto (S, puede ser Netscape) e intenta cargar la
pgina especificada desde la Web. Tambin puedes forzar que se ejecute tu
cliente de correo electrnico:
ShellExec("mailto:billg@microsoft.com")
con el nombre de Billy ya escrito en el campo del destinatario y la ventana de
mensaje lista para que comiences a escribir la ltima razn por la que odias a
Windows. Aunque la Shell API puede ser usada para acceder a cualquier enlace
que podras usar como enlace HREF en un documento HTML, tambin puedes
acceder a otras cosas de tu sistema:

*** Abrir el Explorador en c: emp


Shellexec("c: emp")
*** Ejecutar VFP
ShellExec("c:vstudiovfp98vfp6.exe")
*** Abrir un documento Word
ShellExec("c:WebbookChapter7Chapter7.doc")
*** Abrir un archivo Zip con WinZip
ShellExec("c:downloadssouthpark.zip")
Tambin puedes editar e imprimir un documento, si el tipo de documento lo
soporta:
*** Aparece el editor HTML configurado en el sistema
ShellExec("http://www.west-wind.com/", "Edit")
ShellExec("c:WebbookChapter7Chapter7.doc", "Print")

La primera de las instrucciones provoca que el cdigo HTML del sitio West Wind
se abra en tu editor HTML favorito (si tienes uno configurado), listo para la edicin.
El ltimo ejecuta Microsoft Word e imprime el documento solicitado.

Como tiene la capacidad de ejecutar tu explorador Web, esta API es un fcil


mtodo para atraer gente a tu sitio Web con un botn o una opcin de men.
Puedes fcilmente agregar esta funcionalidad para llevar a los usuarios a pginas
de informacin, actualizar pginas y, naturalmente, pginas con formularios de
pedido para comprarte ms cosas. Puedes incluso mostrar informacin
personalizada, o informacin que se actualiza en forma peridica, simplemente
usando convenciones de nombre para las pginas HTML en el servidor (qu tal
un consejo del da con pginas HTML con nombres como Tip102098.htm?).
Tambin puedes provocar que el pedido sea dinmico a travs de la cadena URL
consultando un enlace dinmico al servidor como una pgina ASP o una solicitud
FoxISAPI:
ShellExecute(http://www.west-
wind.com/wwThreads/default.asp?MsgId=_SA012344)
Esto te lleva directamente al mensaje especificado en esta aplicacin de tabln de
mensajes. Podras mostrar informacin de consulta en el servidor de la misma
manera.

Adicionalmente, la API hace fcil mostrar HTML en tus aplicaciones, ya sea desde
un archivo o una cadena de texto. He aqu una til y pequea funcin que usa
ShellExecute para mostrar un texto HTML en el explorador:
FUNCTION ShowHTML
LPARAMETERS lcHTML, lcFile, loWebBrowser
lcHTML = IIF(EMPTY(lcHTML), "", lcHTML)
lcFile = IIF(EMPTY(lcFile), SYS(2023) + "\_HTMLView.htm",lcFile)
STRTOFILE(lcHTML, lcFile)
IF VARTYPE(loWebBrowser) = "O"
*** Si se pas un objeto browser usarlo
*** en lugar de una ventana externa del browser
loWebBrowser.Navigate(lcFile)
ELSE
ShellExecute(lcFile)
ENDIF
RETURN
Puedes simplemente pasar cualquier cadena HTML a esta funcin y la interpretar
en el explorador que emerger abierto. Si tienes una instancia existente de un
objeto WebBrowser o de un objeto IE COM (ms sobre esto ms adelante),
puedes interpretar el HTML dentro de ese objeto en lugar de una ventana externa
controlada por ShellExecute.

Tambin puedes llamar a la interfase COM de la Shell API para acceder a toda
clase de interesantes funcionalidades de Windows:
o = CREATEOBJECT("Shell.Application")
o.Open("http://www.west-wind.com/")
*** Dispara en forma modal los dilogos Windows
o.SetTime()
o.FindFiles()
o.ShutDownWindows()
o.FileRun()
o.ControlPanelItem("Network")
"Open" trabaja prcticamente igual que un llamado a la ShellExecute API, slo que
siempre usa el verbo de accin Open. No hay una opcin Edit o Print, de manera
que tienes que usar ShellExecute para esas operaciones. No obstante, la Shell
API tambin incluye el acceso a la mayora de las operaciones del escritorio
Windowspero ten presente que todas estas operaciones requieren algn tipo de
intervencin del usuario. Estos mtodos muestra dilogos en los cuales el usuario
debe llenar informacin o pinchar sobre un botn para continuar. Qu tiene todo
esto que ver con Internet?. No muchopero puedes encontrar tiles estas
operaciones relacionadas.
Los protocolos Internet de wwIPStuff

wwIPStuff es una biblioteca de clases que provee los protocolos comunes de


Internet, agrupados en una nica, y fcil de usar, biblioteca de clases. La
biblioteca de clases puede ser bajada de http://www.west-
wind.com/files/wwipstuff.zip y est disponible como un shareware completamente
funcional de West Wind Technologies. La biblioteca fue construida originalmente
para dar la funcionalidad que sera comnmente requerida en el curso del
desarrollo de una aplicacin Web. Incluye soporte para correo electrnico SMTP,
funcionalidad FTP, bsqueda de nombre de dominio y bsqueda inversa, la
capacidad de discar una conexin RAS y un nmero de otras caractersticas
relacionadas con el manejo de conexiones HTTP a travs de cdigo. Las
caractersticas HTTP se describen en forma detallada ms adelante en este
artculo.
Envo de Correo Electrnico SMTP

El correo electrnico contina siendo la actividad ms popular en Internet, y cada


vez ms aplicaciones Internet estn aprovechando la interfase de correo
electrnico. De algunos de los usos comunes del correo electrnico
frecuentemente lo utilizo para:
Enviar contenido de cualquier clase a un usuario
Enviar confirmaciones e informacin de estado de cosas como solicitudes de pedido
colocadas, despachos, etc.
Notificar errores en aplicaciones
Enviar la salida de informes de mucho tiempo de ejecucin a los usuarios una vez
que los informes estn completos.
wwIPStuff implementa el correo electrnico SMTP de salida va una interfase DLL
en wwIPStuff.dll, que contiene una clase C++ de correo electrnico que realiza las
operaciones de conexin y comunicacin con el servidor de correo. El cdigo VFP
simplemente acta como un intermediario para la funcin, con una gran interfase
de parmetros y propiedades de clase que pasan la informacin a la DLL para ser
procesados.

Para instalarla, simplemente asegrate de tener wwIPStuff.vcx/.vct, wwUtils.prg,


wconnect.h y wwIPStuff.dll en el camino de la aplicacin actual o en algn lugar en
el Visual FoxPro SET PATH. El uso de la clase misma es muy simple. Slo tienes
que definir unas pocas propiedades relevantes en el objeto wwIPStuff para enviar
un mensaje.
SET CLASSLIB TO wwIPSTUFF ADDITIVE
SET PROCEDURE TO wwUtils ADDITIVE
loIP = CREATEOBJECT("wwIPStuff")
loIP.cMailServer = "your.mailserver.com" && or IP address
loIP.cSenderEmail = "yourname@yours.com"
loIP.cSenderName = "Jimmy Roe "
loIP.cRecipient = "jroe@roe.com "
loIP.cCCList = "jbox@com.com,ttemp@temp.com"
loIP.cBCCList = "somebody@nowhere.com"
loIP.cSubject = "wwIPStuff Test Message"
loIP.cMessage = "Test Message body" + CHR(13)
*loIP.cAttachment = "c: emppkzip.exe"
*** Espera de la finalizacin del envo.
llResult = loIP.SendMail()
IF !llResult
WAIT WINDOW loIP.cErrorMsg
ELSE
WAIT WINDOW NOWAIT "Message sent..."
ENDIF
wwIPStuff es un cliente SMTP minimalista que te permite usar la interfase de clase
para definir las propiedades del correo electrnico y del mtodo SendMail() que
realmente enva el mensaje al servidor de correo. Puedes especificar el nombre
del remitente (nota que potencialmente puedes simular una direccin de correo
electrnicoesa es la manera en que SMTP trabaja) y luego definir la lista de
destinatarios. Puedes proveer ya sea una nica direccin de correo electrnico o
una lista. En este ltimo caso, separa cada destinatario primario, destinatario CC y
destinatario CC Invisible con comas. El mensaje de correo electrnico real
consiste en una lnea de Asunto y un cuerpo de mensaje, que puede tener
cualquier longitud. Opcionalmente, puedes adjuntar un archivo al mensaje; los
archivos se codifican en formato MIME.

Los mensajes de correo electrnico pueden ser enviados de dos modos


diferentes: Sincrnico o Asincrnico. SendMail() espera por la finalizacin de la
operacin de envo (Send) y luego retorna un error o informacin de finalizacin
con un resultado .T. o .F.. Si se retorna .F., puedes verificar la propiedad
cErrorMsg para ver el error que ocurri.
SendMailAsync() enva el mensaje sin esperar por un resultado. La operacin
corre en un hilo separado, de manera que para tu aplicacin parece que el retorno
fuera instantneo. Cuando se corren aplicaciones Web en particular, ste es el
modo preferido de enviar mensajes, para evitar el bloqueo del servidor mientras
espera que se complete la operacin de envo de correo.

Nota que SMTP es un protocolo basado en servidor, lo que significa que los
mensajes enviados a l estn presentados pero no necesariamente son
procesados inmediatamente. Esto significa que, aun si la llamada sincrnica
SendMail() retorna un cdigo de estado bueno, no hay garanta que el mensaje de
correo electrnico haya llegado realmente a su destinatario. La nica manera de
averiguar por una direccin de correo electrnico no vlida o por una casilla de
correo cerrada es el correo de retorno que arribar en tu propia casilla.
Transferencias FTP

wwIPStuff provee un nmero de funciones FTP que facilitan el "subir" y


"descargar" archivos. Las funciones FTP estn implementadas usando cdigo que
conversa con las funciones FTP del sistema WinInet.dll. No tengo suficiente
espacio aqu para publicar el cdigo fuente, pero puedes analizar el cdigo
completo en wwIPStuff.vcx.

Para descargar un archivo va FTP, usa el siguiente cdigo:


SET CLASSLIB TO wwIPStuff ADDITIVE
SET PROCEDURE TO wwUtils ADDITIVE
loFTP = CREATEOBJECT("wwFTP")
lnResult = loFTP.FTPGetFile("ftp.westwind.com", "pkunzip.exe", ;
"c: emppkunzip.exe")
IF lnResult # 0
? loFTP.cErrorMsg
RETURN
ENDIF
FTPGetFile() es un llamado sincrnico puro que toma un archivo en lnea y lo
descarga como un archivo local. Como es sincrnico y no provee ninguna
informacin de estado sobre la transferencia de archivos grandes, esta funcin
podra hacer pensar a los usuarios que su mquina se ha bloqueado.

Para trabajar alrededor de este problema, est FTPGetEx(), que soporta llamadas
a mtodos de evento que te permiten cancelar una descarga y manejar una
visualizacin de estado en pantalla. Para hacerlo, debes crear una subclase de
wwFTP o arrastrarla sobre un formulario para implementar el mtodo
OnFTPBufferUpdate(). El cdigo completo es similar a ste:
SET CLASSLIB TO wwIPStuff additive
SET PROCEDURE TO wwUtils additive
PUBLIC o
o = CREATEOBJECT("myFTP")
WAIT WINDOW NOWAIT "Alt-x to abort download..."
ON KEY LABEL ALT-X o.lCancelDownload = .T.
IF o.FTPConnect("ftp.west-wind.com") # 0
? o.nError
? o.cErrorMsg
RETURN
ENDIF
IF o.FtpGetFileEx("wconnect.zip","c: empwconnect.zip") # 0
? o.nError
? o.cErrorMsg
RETURN
ENDIF
ON KEY LABEL ALT-X
RETURN
DEFINE CLASS myFtp AS wwFTP
FUNCTION OnFTPBufferUpdate
LPARAMETER lnBytesDownloaded, lnBufferReads, lcCurrentChunk
DO CASE
CASE lnBufferReads > 0
WAIT WINDOW "Bytes read: " + TRANSFORM(lnBytesDownloaded) NOWAIT
*** DoEvents
*** Manejar eventos de la interfase de usuario como el click de un Botn Cancelar
CASE lnBufferReads = -1
WAIT WINDOW "Download aborted..." TIMEOUT 2
ENDCASE
RETURN
ENDDEFINE
Aqu estoy usando el comando Alt-X ON KEY LABEL para capturar una
cancelacin de la descarga definiendo la bandera del objeto FTP
lCancelDownload a .T. Cuando esta bandera es verdadera, el cdigo FTP termina
cuando el prximo bloque de datos est por ser aceptado.

Para poder mostrar informacin de estado durante la descarga, el mtodo recibe


un nmero total de bytes descargados. Los parmetros para este mtodo
contienen le nmero actual de bytes recibidos, el nmero de lecturas que han
ocurrido hasta el momento y el bloque de datos actualmente ledo. Este ltimo
tem es til para construir una salida incremental para datos no binarios que
pueden ser ledos a medida que llegan. El parmetro lnBufferReads contiene un
nmero mayor que 0 mientras se est leyendo y -1 si ocurri un error o si la
operacin fue cancelada (o sea, si lCancelDownload = .T.).
Si necesitas controlar otros elementos de la Interfase de Usuario, como un
formulario con un botn Cancelar, debes asegurarte que llamas a DoEvents en la
rutina actualizada de modo que el evento de la Interfase de Usuario pueda
dispararse y correr.

Puedes tambin "subir" archivos de la misma manera usando los mtodos


FTPSend y FTPSendEx. He aqu un ejemplo con FTPSend (la versin con
SendEx provee los mismos "eventos" OnFTPBufferUpdate como el mtodo
FTPGetFileEx method):
o = CREATEOBJECT("wwFTP")
lnResult = o.FTPSendFile("ftp.west-wind.com", "c: emppkunzip.exe", ;
"/pkunzip.exe", "username", "password")
IF lnResult # 0
? o.cErrorMsg
ENDIF
Nota que el nombre de usuario y la contrasea se requieren slo si "subes"
archivos a un directorio restringido que no permite el acceso a usuarios annimos.
Este es generalmente el caso para las "subidas" FTP, pero depende enteramente
del administrador del sitio configurar estos permisos

En adicin a estas funciones, puedes obtener una listado de directorio FTP y


borrar archivos en el servidor usando los mtodos aFTPDir y FTPDeleteFile del
objeto wwFTP. chale una mirada a la biblioteca de clases ya al archivo de ayuda
HTML incluido para ms detalles sobre cmo llamar a estos mtodos.
WwIPStuff funcionalidad HTTP

La ms potente caracterstica de WwIPStuff es su funcionalidad HTTP. Hablar


ms sobre esto ms adelante en este artculo, pero en su forma bsica provee un
fcil mecanismo para recuperar contenido Web de cualquier URL HTTP.

La forma ms fcil de comenzar es con el mtodo HTTPGet, que es una manera


simple de recuperar contenido Web en una cadena de texto con una nica
llamada. Para usarlo, simplemente debes hacer:
O=CREATEOBJECT("wwIPStuff")
*** Recuperacin simple de datos
lcResult = o.HTTPGet(http://www.west-wind.com/)
lcResult = o.HTTPGet(http://localhost/datafile.dat)
lcResult = o.HTTPGet(http://localhost/report.pdf)
que recupera el contenido completo de una pgina Web en una cadena de texto.
Nota que puedes traer cualquier clase de contenido Web que el servidor tenga
disponible. Las dos ltimas solicitudes traen informacin binaria del servidor un
archivo de datos y un documento Adobe PDF que puedes recuperar fcilmente y
guardar en un archivo con la nueva funcin de VFP STRTOFILE.

Es tambin posible enviar informacin al servidor por medio de POST. POST es


un mecanismo estndar HTTP para enviar informacin a un servidor. Usas
operaciones POST toda vez que envas un formulario HTML en una pgina Web
sobre Internet. El explorador codifica los datos del formulario en un buffer POST
que es enviado al servidor Web que a su turno puede recuperar estas variables
como parte de la solicitud Web. En las Pginas Activas de Servidor (ASP) y con
Web Connection usaras la coleccin Request.Form() para recuperar estos datos
en una aplicacin servidora.

Para usar POST emplea un cdigo como el siguiente:


lcData = ""
lnSize = 0
o.HTTPConnect(www.west-wind.com,rstrahl,Password)
o.AddPostKey(Name,Rick)
o.AddPostKey(Company,West Wind Technologies)
lnResult = o.HTTPGetEx(/scripts/wc.dll?PostTest,;
@lcData,@lnSize)
o.HTTPClose()
A diferencia de la operacin HTTPGet que maneja todo en una nica llamada al
mtodo, HTTPGetEx requiere varias llamadas para abrir, agregar datos al buffer
de entrada, enviar y, finalmente, cerrar la conexin con el servidor Web. Nota que
tienes que pasar los datos del buffer y el parmetro de tamao por referencia
estos valores son definidos en la llamada al mtodo. Puedes especificar un buffer
pre-dimensionado y un tamao que limitar la cantidad de datos recuperados a
ese valor. Definiendo el buffer con la cadena nula ("") y el tamao a 0 significa que
el tamao del buffer es asignado dinmicamente. Usar un tamao fijo puede ser
til si slo quieres hacer 'ping' a un sitio o recuperar slo un encabezado.

Aunque HTTPGetEx est all primariamente para proveer la funcionalidad POST,


realmente no tienes que enviar ninguna variable al servidor con POST. El mtodo
da mucho ms control sobre las solicitudes HTTP de modo que puedes usarlo
tambin para una operacin de captura pura (GET) que requiere ms control:

Conexiones seguras sobre HTTPS/SSL


Validacin de contraseas va Autenticacin Bsica.
Buffers de entrada con tamao asignado dinmicamente
Notificacin de eventos mientras una descarga est en progreso
Recuperar encabezados de HTTP (propiedad cHTTPHeaders)

En general HTTPGetEx es mucho ms flexible, pero HTTPGet() es obviamente


ms fcil de usar. Usa HTTPGet cuando simplemente necesites recuperar datos
sin ninguna opcin especial. En todos los otros casos puedes usar HTTPGetEx.
WwIPStuff provee una cantidad de otros mtodos y objetos relacionados con el
acceso HTTP que incluyen:

Correr instrucciones SQL sobre HTTP (requiere cdigo servidor de VFP)


Transferir archivos sobre HTTP
Operaciones asincrnicas de HTTPGetAsync y HTTPGetExAsync

Puedes encontrar ms en el archivo de ayuda HTML wwIPStuff.chm.


Acceso de Datos sobre TCP/IP

He discutido la provisin de datos a aplicaciones cliente en gran detalle en este


libro. He mostrado soluciones servidoras puras que manejan la entrega de
contenido de datos para ser mostrados en el cliente y he mostrado como
transportar datos sobre HTTP usando RDS y wwIPStuff. No obstante, hay otra
manera, potencialmente ms fcil, de acceder a datos sobre Internet usando el
protocolo TCP/IP. TCP/IP es justamente otro protocolo de red soportado por
Windows por lo que es posible usar la Internet como una red gigante para acceder
a datos y recursos directamente sobre Internet.
Accediendo a datos VFP directamente sobre TCP/IP
Por ejemplo, me es enteramente posible conectarme a mi servidor Web en Oregon
desde mi casa en Hawaii usando lo siguiente:

USE www.west-wind.comd$webappswwdemoguest.dbf

Nota: El uso de direcciones IP y nombres de dominio con referencias UNC slo


funciona con Windows NT (Win2000). Para Win95/98 tienes que definir entradas
LMHOSTS para asignar las direcciones de IP a nombres de Netbios.

El comando de arriba me conectar a mi servidor Web y abrir el archivo


Guest.dbf que entonces podr usar como cualquier otra tabla de VFP. Aunque
esto funciona bien, el proceso es lento aun con una tabla pequea. El problema es
que las conexiones remotas como esta toman su tiempo para efectuarse sobre
Internet. Usando una conexin de discado de 56k toma aproximadamente un
minuto para realizar la conexin de arriba con un archivo de aproximadamente 200
registros. En este caso la sobrecarga es el tiempo de conexin. Si tus archivos
contienen muchos datos con archivos de ndices, al abrir un archivo en el servidor
causar que toda la informacin del ndice se trasmita sobre la conexin lenta
hacindola todava ms lenta.

Una vez que la conexin inicial se ha establecido y la tabla est abierta a travs de
ella, la operacin es razonablemente rpida pero depende del tamao del archivo
de datos. Si el ndice es pequeo y se usa cach local, las bsquedas pueden ser
muy rpidas. No obstante, si el ndice no es descargado completamente podrs
observar largas demoras a medida que VFP trae ms informacin del ndice para
efectuar la bsqueda. Sobre conexiones lentas, el indexado de VFP y la
optimizacin Rushmore que lo requiere puede convertirse en una desventaja al
requerir que sean descargados inicialmente ms datos que los necesarios.
Aqu puedes ver el problema con una herramienta de base de datos basada en
archivos como VFP lleva a cabo todo su procesamiento en el lado cliente, de
manera que cuando los datos estn en el lado servidor con una conexin lenta, el
cliente necesita traer toda la informacin necesaria para realizar las bsquedas y
obtener los datos requeridos. Esto puede requerir cantidades significativas de
datos localmente causando un incremento de trfico sobre la conexin de red. En
este escenario en que SQL Server realiza el procesamiento en el servidor y luego
retorna slo el resultado, es mucho ms eficiente. Analizar esto en la siguiente
seccin.

Deberas notar un punto importante ahora si hubieras tratado de conectarte a mi


servidor Web usando el USE y la sintaxis UNC de arriba no habras podido. Y esto
es una cosa buena obviamente no deberas tener acceso a mis tablas en mi
servidor Web dado que no tienes permisos en esa mquina. Para aplicaciones que
quieran usar el acceso a archivos con TCP/IP, esto significa que necesitas
establecer apropiadamente la seguridad NT usando una cuenta NT especfica con
los derechos de acceso requeridos. Este nombre de usuario puede ser ya sea una
cuenta de aplicacin genrica o una contrasea de usuario particular provista por
el usuario. Notar que NT puede validar la seguridad a travs de una conexin
Internet automticamente. Estoy conectado en mi mquina local como el usuario
rstrahl y esa misma cuenta existe en el servidor con la misma contrasea; la
validacin de paso a travs me permite acceder al servidor automticamente sin
tener que conectarme como usuario. Si trato de conectarme con un nombre de
usuario diferente emerger el dilogo de NT requirindome que ingrese una
cuenta de usuario vlida para el servidor. El comportamiento es idntico a la
manera que usaras una conexin LAN con NT o Win9x.

Otra cuestin relacionada es la seguridad de datos. Una vez que ests conectado
y la informacin se est transfiriendo sobre la conexin Internet, esos datos no
estn encriptados de ninguna manera. Esto significa que cualquiera con un
analizador de protocolo puede capturar los datos desde el cable.
Usando SQL Server sobre TCP/IP

Justamente como puedes acceder a archivos DBF sobre Internet tambin puedes
acceder a SQL Server de la misma manera. Si ests usando Microsoft SQL Server
puedes configurar ese servidor para usar TCP/IP como su protocolo de red (con
SQL Server 7.0 este es el protocolo por defecto SQL Server 6.5 usa Named
Pipes por defecto y mantendr esa configuracin si es actualizado a 7.0). Una vez
que hayas configurado el servidor con TCP/IP podrs conectarte al servidor como
sigue:
lnHandle = SQLSTRINGCONNECT(driver={SQL Server};server=www.west-
wind.com; + ;
database=Pubs;uid=sa;pwd=;)
SQLEXEC(lnHandle,SELECT * FROM Authors)
BROWSE
Esto tambin trabaja de acuerdo con lo esperado. No obstante, igualmente que
con el acceso directo a una tabla VFP la conexin puede tomar un largo tiempo.
Sobre la misma conexin de discado el tiempo de conexin al servidor es de
alrededor de 1 minuto. Una vez que est establecida la conexin, el SQL Server
remoto corre la consulta y luego retorna slo los resultados sobre Internet. En este
aspecto el acceso es muy eficiente y deberas poder correr consultas bastante
eficientemente aun con una conexin lenta, suponiendo que retornas cantidades
razonables de informacin. Dado que la lentitud proviene primariamente del
tiempo de conexin, querrs configurar tu aplicacin de manera que abra la
conexin al inicio y mantenga esa conexin abierta para todas las consultas
futuras sobre ese servidor. Si usas conexiones persistentes en tus aplicaciones la
velocidad incluso sobre conexiones a Internet lentas puede ser muy buena, ya que
slo se envan las cadenas con la consulta hacia el servidor y se retornan los
conjuntos de resultados desde el servidor.

Hay un par de problemas con este esquema y ambos tienen que ver con la
seguridad. Para permitir el acceso a SQL Server ests esencialmente abriendo
dicho servidor a la Internet. Cualquiera puede acceder ese servidor y
potencialmente deja la posibilidad

S-ar putea să vă placă și