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 agregando una 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 tareas siguientes. Debe completarlas en este orden para que el tutorial se realice correctamente:
Crear el proyecto
Configuración del 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#
Abra un nuevo proyecto de aplicación de consola F#.
En el Explorador de soluciones, abra el acceso directo para el nodo Referencia del proyecto y, a continuación, elija Agregar referencia.
En el área Ensamblados, elija Framework y, a continuación, en la lista de ensamblados disponibles, elija System.Runtime.Serialization y System.ServiceModel.
En el área Ensamblados elija Extensiones.
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.
Configuración del 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 tipos
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
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 Herramienta de utilidad de metadatos de ServiceModel (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 control de excepciones. Escriba el siguiente código para intentar obtener 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#)