Hola invitado         31 Jul, 2010 - 07:25
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Consumir Servicios Web .NET desde VFP lecturas 7045
 Enviado por amby en Viernes, 29 Julio, 2005
General (Ejemplo 4 del artículo Interoperabilidad VFP y .NET) Este escrito tiene como objetivo servir de guía paso a paso sobre cómo realizar la conexión entre estas dos herramientas para desarrollo de aplicaciones que son: Visual FoxPro y VS.NET. En este caso creamos un Servicio Web en .NET y lo consumimos en VFP.

Consumir en VFP Servicios Web creados en .NET

Por Amby


(Ejemplo 4 del artículo Interoperabilidad VFP y .NET)

En .NET creamos una nueva solución seleccionando Servicio Web

Al crear un proyecto WS ASP.Net, el IDE de VS.Net incluye automáticamente todas las referencias requeridas y crea un archivo de código fuente de WS, con una plantilla con el código "Hola mundo"

Seleccionamos haga clic aquí para cambiar a la vista de códigos y escribimos un método que devuelva la Hora actual.

Imports System.Web.Services

<System.Web.Services.WebService(Namespace := "http://tempuri.org/WebService2/Service1")> _
  Public Class Service1
  Inherits System.Web.Services.WebService 
  
#Region " Código generado por el Diseñador de servicios Web "
  .... código escrito por el framework de .NET
#End Region 
  
  ' EJEMPLO DE SERVICIO WEB
  ' El servicio de ejemplo HelloWorld() devuelve la cadena Hello World.
  ' Para generar, quite los comentarios de las siguientes líneas y, a continuación, guarde y genere el proyecto.
  ' Para probar este servicio Web, compruebe que la página de inicio es el archivo .asmx
  ' y presione F5.
  '
  '<WebMethod()> Public Function HelloWorld() As String
    ' HelloWorld = "Hello World"
  ' End Function 
  
  <WebMethod()> Public Function DameHoraActual() As DateTime
    Return DateTime.Now
  End Function 
  
End Class

Lo único diferente para los desarrolladores VFP es <WebMethod()> Este atributo dice al motor de ejecución de ASP.Net que este método será expuesto a través de un WS acorde con el estándar SOAP basado en XML para el paso de mensajes de peticiones y respuestas de WS.

Para ejecutar el WS basta con oprimir F5 para ver el test

En este ejemplo, el servicio expone un único método, hacemos clic en DameHoraActual

Hacemos Clic en Invocar para ejecutar el servicio. Si el Servicio Web requiere de parámetros se van a mostrar cuadros de texto para introducirlos.

El valor devuelto por el método está envuelto en un XML que es el mecanismo clave que permite llamar este WS desde VFP

Bien, ya tenemos un Servicio Web que funciona, ahora veamos cómo lo podemos registrar y consumir desde VFP.

Para ello vamos a utilizar la excelente herramienta Panel de tareas – Task Pane que se introdujo en VFP 8.0 y entre sus múltiples ventajas y paneles nos detendremos en la ficha XML Web Services.

Hacemos Clic en Register an XML WS

Debemos especificar la URL que describe el WS y dice a VFP qué métodos así como los parámetros y valores de retorno del WS. Los WS basados en ASP.Net proporcionan una URL WSDL (WS Description Languaje), esta URL proporciona precisamente esta información. Podemos encontrar esta URL lanzando nuevamente el test y haciendo clic en el enlace Descripción de servicios

Copiamos y pegamos en la ventana de VFP

En condiciones reales, no hay que olvidar cambiar localhost por el nombre del dominio donde reside el WS.

Después de registrarlo

Se puede comprobar desde el mismo Task Pane

Hacemos Clic en el icono que aparece al lado del nombre del servicio que queremos verificar y aparece esta pantalla

Ahora sabemos que funciona en VFP y ya podemos utilizarlo en un programa de VFP, para esto necesitamos código; pero la buena, buenísima noticia es que el panel de tarea también nos proporciona ese código, se puede arrastrar y pegar directamente en una ventana de código. En el ejemplo se incluye hasta el tratamiento de errores, hay que prestar atención a estas dos líneas

LOCAL loService1 AS "XML Web Service"
* LOCAL loService1 AS "MSSOAP.SoapClient30"
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
*__VFPWSDef__: loService1 = http://localhost/WebService2/Service1.asmx?WSDL , Service1 , Service1Soap
LOCAL loException, lcErrorMsg, loWSHandler
TRY
  loWSHandler = NEWOBJECT("WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx")
   loService1 = loWSHandler.SetupClient("http://localhost/WebService2/Service1.asmx?WSDL", ;
  "Service1", "Service1Soap")
  * Call your XML Web service here. ex: leResult = loService1.SomeMethod()
  lwsHoraActual = loService1.DameHoraActual()
  MESSAGEBOX(loService1.DameHoraActual)
CATCH TO loException
  lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
  DO CASE
    CASE VARTYPE(loService1)#"O"
      * Handle SOAP error connecting to web service
    CASE !EMPTY(loService1.FaultCode)
      * Handle SOAP error calling method
      lcErrorMsg=lcErrorMsg+CHR(13)+loService1.Detail
    OTHERWISE
      * Handle other error
  ENDCASE
  * Use for debugging purposes
  MESSAGEBOX(lcErrorMsg)
FINALLY
ENDTRY 

Cambiamos esas líneas de programa y vemos como muestra IntelliSense

Lo ejecutamos y vemos el resultado.

El ejemplo de código instancia el objeto WSHandler, que es el conector de VFP al WS. Este objeto se configura luego con la URL WSDL. Luego el método, en este caso, DameHoraActual que devuelve una variable DateTime de .Net. VFP automáticamente asigna el valor devuelto a una variable DateTime, a pesar que los dos formatos FechaHora son algo diferentes internamente. Teniendo en cuenta que sabemos el tipo de dato que devuelve podemos realizar operaciones como:

MESSAGEBOX(loService1.DameHoraActual())
ldHoraActual = loService1.DameHoraActual
MESSAGEBOX(TTOC(ldHoraActual,2)) 

Esto no siempre es tan fácil, en ocasiones puede devolver datos que no sean nativos de VFP, por ejemplo, cuando el valor devuelto es un objeto complejo como un DataSet de ADO, para ello recordar que existe la clase XMLAdapter desde VFP 8.0 que se encarga de manipular los XML.

Espero que haya resultado de utilidad.

Saludos,

Ana María Bisbé York
www.amby.net


 Versión imprimible  
Consumir Servicios Web .NET desde VFP | Entrar/Crear una cuenta | 0 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.



Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.