Instruções passo a passo: acessando um serviço Web por meio de provedores de tipos (F#)
Este passo-a-passo mostra como usar o provedor de tipo WSDL (Web Services Description Language) 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 adicionando uma referência Web, 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 você escreva o código que cria o tipo WsdlService, os tipos sejam gerados e se tornem disponíveis. Este processo depende do serviço que está disponível quando você está escrevendo o código.
Essa explicação passo a passo mostra 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 Gerenciador de Soluções, abra o menu de atalho para o nó Referência do projeto e, em seguida, escolha Adicionar Referência.
Na área Assemblies, escolha Framework e, em seguida, na lista de assemblies disponíveis, escolha System.Runtime.Serialization e System.ServiceModel.
Na área Assemblies, escolha Extensões.
Na lista de assemblies disponíveis, escolha FSharp.Data.TypeProviders e, em seguida, clique no botão OK para adicionar referências a esses assemblies.
Configurando o provedor de tipo
Nessa 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 URI 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 descreverá o problema. Você pode localizar as mesmas informações na janela Lista de Erros ou na Janela de Saída depois que você compilar.
Há duas maneiras de 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 Ferramenta Utilitário de Metadados ServiceModel (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 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. Nessa 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, portanto, 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 WsdlService (F#)