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
> >
> >
>
>

Responder a