Compartilhar via


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#

  1. Abra um novo projeto de Aplicação de Console de F#.

  2. No Buscador de Soluções, abra o menu de atalho para o nó Referência do projeto, e então escolha Adicionar Referência.

  3. Na área Montagens (Assemblies), escolha Framework, e então, na lista de montagens (assemblies) disponíveis, escolha System.Runtime.Serialization e System.ServiceModel.

  4. Na área Montagens (Assemblies), escolha Extensões.

  5. 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

  1. 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
    
  2. 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#)

Outros recursos

Provedores de tipo