Tutorial: Obtener acceso a un servicio Web mediante proveedores de tipo (F#)

Este tutorial muestra cómo utilizar el proveedor de tipos del Lenguaje de descripción de servicios Web (WSDL, Web Services Description Language) que está disponible en F# 3.0 para tener acceso a un servicio WSDL.En otros lenguajes .NET, se genera el código para obtener acceso al servicio web llamando a svcutil.exe, o mediante la opción Agregar referencia web, por ejemplo, en un proyecto de C# para hacer que Visual Studio llame a svcutil.exe automáticamente.En F#, tiene la opción adicional de utilizar el proveedor de tipos WSDL, de forma que, tan pronto como escriba el código que crea el tipo WsdlService, los tipos se generan y están disponibles.Este proceso confía en que el servicio esté disponible cuando se esté escribiendo el código.

En este tutorial se muestran las siguientes tareas:Debe completarlas en este orden para que el tutorial se realice correctamente:

  • Crear el proyecto

  • Configurar el proveedor de tipos

  • Llamar al servicio web y procesar los resultados

Crear el proyecto

En este paso, se crea un proyecto y se agregan las referencias adecuadas para utilizar un proveedor de tipos WSDL.

Para crear y configurar un proyecto F#

  1. Abra un nuevo proyecto de aplicación de consola F#.

  2. En el Explorador de soluciones, abra el acceso directo para el nodo Referencia del proyecto y, a continuación, haga clic en Agregar referencia.

  3. En el área Ensamblados, elija Framework y, a continuación, en la lista de ensamblados disponibles, elija System.Runtime.Serialization y System.ServiceModel.

  4. En el área Ensamblados elija Extensiones.

  5. En la lista de ensamblados disponibles, elija FSharp.Data.TypeProviders, y, a continuación, elija el botón ACEPTAR para agregar referencias a estos ensamblados.

Configurar el proveedor de tipos

En este paso, se utiliza el proveedor de tipos WSDL para generar los tipos para el servicio web TerraServer.

Para configurar el proveedor de tipos y generar los tipos

  1. Agregue la siguiente línea de código para abrir el espacio de nombres del proveedor de tipos.

    open System
    open System.ServiceModel
    open Microsoft.FSharp.Linq
    open Microsoft.FSharp.Data.TypeProviders
    
  2. Agregue la siguiente línea de código para invocar al proveedor de tipos con un servicio web.En este ejemplo, utilice el servicio web TerraServer.

    type TerraService = WsdlService<"http://msrmaps.com/TerraService2.asmx?WSDL">
    

    Un subrayado ondulado rojo aparece en esta línea de código si está mal escrita la URI del servicio o si el propio servicio está caído o no está funcionando.Si se señala el código, un mensaje de error describe el problema.Puede encontrar la misma información en la ventana Lista de errores o en la Ventana de salida después de compilar.

    Hay dos maneras de especificar las opciones de configuración para una conexión WSDL, mediante el archivo app.config para el proyecto o mediante los parámetros de tipo estático en la declaración del proveedor de tipos.Puede utilizar svcutil.exe para generar los elementos del archivo de configuración apropiados.Para obtener más información sobre cómo utilizar svcutil.exe para generar información de configuración para un servicio web, vea ServiceModel Metadata Utility Tool (Svcutil.exe). Para obtener una descripción completa de los parámetros de tipo estático para el proveedor de tipos WSDL, vea WsdlService (Proveedor de tipo de F#).

Llamar al servicio web y procesar los resultados

Cada servicio web tiene su propio conjunto de tipos que se utilizan como parámetros en las llamadas al método.En este paso, se preparan estos parámetros, se llama a un método web y se procesa la información que devuelve.

Para llamar al servicio web y procesar los resultados

  • El servicio web podría exceder el tiempo de espera o dejar de funcionar, por lo que debe incluir la llamada al servicio web en un bloque de manejo de excepciones (try-catch).Escriba el siguiente código para intentar obtener los datos del servicio web.

    try
        let terraClient = TerraService.GetTerraServiceSoap ()
        let myPlace = new TerraService.ServiceTypes.msrmaps.com.Place(City = "Redmond", State = "Washington", Country = "United States")
        let myLocation = terraClient.ConvertPlaceToLonLatPt(myPlace)
        printfn "Redmond Latitude: %f Longitude: %f" (myLocation.Lat) (myLocation.Lon)
    with
        | :? ServerTooBusyException as exn ->
            let innerMessage =
                match (exn.InnerException) with
                | null -> ""
                | innerExn -> innerExn.Message
            printfn "An exception occurred:\n %s\n %s" exn.Message innerMessage
        | exn -> printfn "An exception occurred: %s" exn.Message
    

    Observe que se crean los tipos de datos necesarios para el servicio web, como Place y Location, como tipos anidados bajo el tipo WsdlService TerraService.

Vea también

Referencia

WsdlService (Proveedor de tipo de F#)

Otros recursos

Proveedores de tipo