Passo a passo: Acessando um serviço da Web usando provedores de tipo (F#)
Este passo-a-passo mostra como usar o provedor de tipo Linguagem de Descrição de Serviços Web (WSDL) que está disponível em F# 3.0 para acessar um serviço WSDL.Em outras linguagens .NET, você gera código para acessar o serviço web chamando svcutil.exe, ou usando a opção Adicionar Referência Web em, por exemplo, um projeto C# obter o Visual Studio para chamar svcutil.exe para você.Em F#, você tem a opção adicional de usar o provedor de tipo WSDL, para que assim que possível você escreva o código que cria o tipo WsdlService, os tipos são gerados e se tornam disponíveis.Este processo depende do serviço que está disponível quando você está escrevendo código.
Essa explicação passo a passo ilustra as seguintes tarefas:Você deve concluí-los nesta ordem para que o guia passo a passo tenha êxito:
Criando o projeto
Configurando o provedor de tipo
Chamar o serviço web, e processar os resultados
Criando o projeto
Nesta etapa, você cria um projeto e adiciona as referências apropriadas para usar o provedor de tipo WSDL.
Para criar e configurar um projeto de F#
Abra um novo projeto de Aplicação de Console de F#.
No Buscador de Soluções, abra o menu de atalho para o nó Referência do projeto, e então escolha Adicionar Referência.
Na área Montagens (Assemblies), escolha Framework, e então, na lista de montagens (assemblies) disponíveis, escolha System.Runtime.Serialization e System.ServiceModel.
Na área Montagens (Assemblies), escolha Extensões.
Na lista de montagens (assemblies) disponíveis, escolha FSharp.Data.TypeProviders, e então escolha no botão OK para adicionar referências a essas montagens (assemblies).
Configurando o provedor de tipo
Nesta etapa, você usa o provedor de tipo de WSDL para gerar tipos para o serviço web TerraServer.
Para configurar o provedor de tipo e gerar tipos
Adicione a seguinte linha de código para abrir o namespace do provedor de tipo.
open System open System.ServiceModel open Microsoft.FSharp.Linq open Microsoft.FSharp.Data.TypeProviders
Adicione a seguinte linha de código para chamar o provedor de tipo com um serviço web.Nesse exemplo, use o serviço web TerraServer.
type TerraService = WsdlService<"http://msrmaps.com/TerraService2.asmx?WSDL">
Uma linha ondulada vermelha aparece sob esta linha de código se a URL de serviço está incorreta ou se o próprio serviço está fora do ar ou não está sendo executado.Se você apontar para o código, uma mensagem de erro descreve o problema.Você pode localizar as mesmas informações na janela Lista de Erros ou na Janela de Saída depois que você criar.
Há duas maneiras para especificar configurações para um conexão WSDL, usando o arquivo app.config para o projeto, ou usando os parâmetros de tipo estáticos na declaração do provedor de tipo.Você pode usar svcutil.exe para gerar os elementos adequados do arquivo de configuração.Para obter mais informações sobre como usar svcutil.exe para gerar informações de configuração para um serviço web, consulte ServiceModel Metadata Utility Tool (Svcutil.exe). Para obter uma descrição completa dos parâmetros de tipo estáticos para o provedor de tipo WSDL, consulte Provedor de tipo de WsdlService (F#).
Chamar o serviço web, e processar os resultados
Cada serviço web tem seu próprio conjunto de tipos que são usados como parâmetros para suas chamadas de método.Nesta etapa, você prepara esses parâmetros, chama um método web, e processa as informações que ele retorna.
Para chamar o serviço web, e processar os resultados
O serviço web pode ter o tempo expirado ou parar de funcionar, então você deve incluir a chamada de serviço web em um bloco de tratamento de exceção.Escreva o código a seguir para tentar obter dados do serviço 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 você cria os tipos de dados que são necessários para o serviço web, como Place e Location, como tipos aninhados sob o tipo WsdlService TerraService.
Consulte também
Referência
Provedor de tipo de WsdlService (F#)