Impresionante José!! Muchas gracias!!
Entonces guardo la DLL que quiero usar en c:\inetpub\wwwroot y en el
código del WS de Visual Basic declaro las funciones de esa DLL y listo?
¿Entendí bien o estoy siendo muy simplista?
Gracias nuevamente
Gustavo
El 20/08/2015 15:45, Jose Paez escribió:
Hola Gustavo
Si, podes realizar el Web Service con .Net y que este utilice los
servicios de un componente desarrollado en VFP.
Saludos
José Paez
&& Ejemplo de la estructura de la clase que tendrás que compilar como
DLL en VFP9
#Define CRChr(13)
#Define CRCRChr(13)+Chr(13)
#Define CRLFChr(13)+Chr(10)
Define Class Gateway As Session OlePublic
Path= "C:\"
Log= "C:\"
************************************************************************
* Gateway :: Init
************************************************************************
Procedure Init
If Not This.OnLoad() Then
Return .F.
Endif
Endproc
************************************************************************
* Gateway :: Destroy
************************************************************************
Procedure Destroy
This.OnDestroy()
Endproc
************************************************************************
* Gateway :: Error
************************************************************************
Procedure Error(lnError, lcMethod, lnLine)
Local;
Array laErrorArray[7]
Local;
lnIAs Integer,;
lcErrMessage As String
= Aerror( laErrorArray )
lcErrMessage = ;
"Error:" + Transform( lnError )+ CR +;
"Metodo:" + Transform( lcMethod )+ CR +;
"Linea:" + Transform( lnLine )+ CR +;
"Detalle:" + Message()
lcErrMessage = + CRCR + lcErrMessage + CRCR
For lnI = 1 To 7
lcErrMessage = lcErrMessage + Transform(lnI) + ": " + Transform(
laErrorArray( lnI ) ) + CR
Endfor
If Inlist( _vfp.StartMode, 3, 5 ) Then
Comreturnerror("Gateway: " + Proper( lcMethod ), lcErrMessage )
Endif
Endproc
************************************************************************
* Gateway :: OnLoad
************************************************************************
Hidden Function OnLoad As Boolean
Local;
llReturn As Boolean,;
loErrHandlerAs Exception
llReturn = .F.
Close Tables All
Close Databases All
Sys(2339,0) && Llamar a CoFreeUnusedLibraries al liberar un objeto COM
Set Ansi On
Set Autoincerror On
Set Autosave Off
Set Blocksize To 64
Set Carry Off
Set Century On
Set Collate To "SPANISH"
Set Confirm Off
Set Currency To "$"
Set Database To
Set Date Dmy
Set Decimals To 2
Set Deleted On
Set Exact On
Set Exclusive Off
Set Fields Off
Set Fixed Off
Set Hours To 24
Set Lock Off
Set Mark To "/"
Set Multilocks On
Set Near Off
Set Null Off
Set Point To "."
Set Reprocess To Automatic
Set Safety Off
Set Seconds On
Set Sysformats Off
Set Talk Off
Set TableValidate To 0
Set Unique Off
Clear Error
Try
&&
&& Aqui tu codigo de inicialización
&&
Catch To loException
lcErrMessage = CRLF +;
"********* Fecha/Hora: " + Transform( Datetime() ) + CRLF + ;
"Error: " + Transform( loException.ErrorNo )+ CRLF + ;
"Metodo: " + Transform( loException.Procedure )+ CRLF + ;
"Linea: " + Transform( loException.Lineno )+ CRLF + ;
"Detalle: " + Transform( loException.Details )+ CRLF + ;
"Mensaje: " + Transform( loException.Message )
Strtofile( lcErrMessage, This.Path + "Gateway.err", 1)
This.ReturnError( loException )
Endtry
Return llReturn
Endfunc
************************************************************************
* Gateway :: OnDestroy
************************************************************************
Hidden Procedure OnDestroy
Close Tables All
Close Databases All
Endproc
************************************************************************
* Gateway :: ReturnError
************************************************************************
Hidden Procedure ReturnError( loException As Exception )
Local;
lcMensaje As String
If Vartype( loException.UserValue ) = "C" And Not Empty(
loException.UserValue ) Then
lcMensaje = loException.UserValue
Else
lcMensaje = loException.Message
Endif
lcErrMessage = CRLF +;
"********* Fecha/Hora: " + Transform( Datetime() ) + CRLF + ;
"Error: " + Transform( loException.ErrorNo )+ CRLF + ;
"Metodo: " + Transform( loException.Procedure )+ CRLF + ;
"Linea: " + Transform( loException.Lineno )+ CRLF + ;
"Detalle: " + Transform( loException.Details )+ CRLF + ;
"Mensaje: " + lcMensaje
loError = Createobject("Exception")
loError.Message = lcErrMessage
loError.ErrorNo = loException.ErrorNo
Strtofile( lcErrMessage, This.Path + "Gateway .err")
Endproc
************************************************************************
* Gateway :: Trace
************************************************************************
Hidden Procedure Trace( tcMessage )
tcMessage = Dtoc( Date() ) + " - " + Time() + Chr(9) + tcMessage + CRLF
Strtofile( tcMessage , This.Path + "Gateway.log", 1)
Endproc
************************************************************************
* Gateway :: Procesar
************************************************************************
Function Procesar;
(;
) As boolean
This.Trace( "Procesar - Inicio" )
Local llResult As Boolean
Local loGateway as Object
Local loException, lcErrorMsg, loWSHandler
llResult = .F.
Try
llResult = MiFuncion()
Catch To loException
This.Trace( "Elegibilidad - Error" )
lcErrorMsg = "Error: " + Transform( loException.ErrorNo ) + " - " +
loException.Message
lcErrorMsg = lcErrorMsg + CR + loGateway.Detail
This.Trace( lcErrorMsg )
loException.UserValue = lcErrorMsg
This.ReturnError( loException )
Finally
loGateway = Null
Endtry
This.Trace( "Procesar - Fin" )
Return llResult
Endfunc
Enddefine
&& Ejemplo de la clase en VB.Net que será publicada como WebService
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Gateway
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Procesar() As Boolean
Dim resultado As Boolean = False
Dim gateway As MiDLL.Gateway
Try
gateway = New MiDLL.Gateway
resultado = gateway.Procesar()
Catch ex As Exception
Throw ex
End Try
Return resultado
End Function
End Class
> Date: Wed, 19 Aug 2015 16:29:35 -0300
> From: [email protected]
> To: [email protected]
> Subject: [GUFA] Web Service con SOAP Toolkit con Internet
Information Services 10
>
> Hola amigos!!
>
> Viendo que nadie contestó, y que busqué por todas partes, supongo
que no
> se puede.
>
> Asique se me ocurre una alternativa con .NET, que nunca lo usé y no
> tengo idea, pero si encontré muchísimo material para armar Web Services
> con .NET, ya sea del lado del cliente o del servidor.
>
> Entonces mi pregunta es: ¿Puedo crear un Web Service con .NET que llame
> las funciones de las DLL generadas con VFP? (Que actualmente actúan
como
> WS en un server Win 2K, funcionan bien, están probadas, todo!!)
>
> Porque aparentemente los Web Serivces creados con .NET son muy fáciles
> de instalar y publicar con IIS 10...
>
> Agradezco cualquier tipo de dato que me ayude a encontrar el camino
a la
> luz...
>
> Saludos y gracias!!
>
>
>
> El 14/08/2015 17:52, Gustavo Señoriño escribió:
> > Hola a Todos!!
> >
> > Se puede instalar un Web Service desarrollado en VFP con SOAP Toolkit
> > 3.0 en un server con IIS 10?
> >
> > Digo, si se cambia el server Win 2000 por uno mas nuevo, va a
> > funcionar bien?
> >
> > Gracias y buen finde
> > Gustavo
> >
> >
>
>