Muchísimas Gracias Jose!!

Ahora estoy bajando el Visual Studio Community... alcanza o necesito otra cosa?

Saludos
Gustavo


El 20/08/2015 21:12, Jose Paez escribió:
Hola Gustavo

Sugiero que dentro del C:\inetpub\wwwroot crees una carpeta por ejemplo "MiProyectoWS". Desde IIS agrega a un nuevo Sitio Web y establece el directorio de contenido (ruta física --> "C:\inetpub\wwwroot\MiProyectoWS")

En Visual Studio vas a publicar/sincronizar el WS en C:\inetpub\wwwroot\MiProyectoWS.

Tambien podes crear una carpeta "C:\inetpub\wwwroot\MiProyectoWS\DLLs", allí copia el componente más los runtimes de VFP9.

Va a ser necesario registrar el componente VFP con REGSVR32 o bien existe la posibilidad de utilizar Component Services.

Es importante que hayas realizado el testing de la DLL asegurando el funcionamiento, paths, permisos, seguridad, etc.

Cualquier duda avise nomas ;o)

Saludos
José Paez




Q








------------------------------------------------------------------------
Date: Thu, 20 Aug 2015 16:17:44 -0300
From: [email protected]
To: [email protected]
Subject: [GUFA] Web Service con SOAP Toolkit con Internet Information Services 10

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/"; <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] <mailto:[email protected]>
    > To: [email protected] <mailto:[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