Поделиться через


Пошаговое руководство. Доступ к веб-службе с помощью поставщиков типов (F#)

В этом пошаговом руководстве показано, как использовать поставщик типов на языке WSDL (Web Services Description Language), который доступен в F# версии 3.0 для доступа к службе WSDL. В других языках .NET создание кода для доступа к веб-службе осуществляется путем вызова средств svcutil.exe или с помощью опции добавления веб-ссылки, например, в проекте C# для получения Visual Studio для автоматического вызова svcutil.exe. В языке F# имеется дополнительный параметр использования поставщика типов языка WSDL, чтобы по завершении написания кода, который создает тип WsdlService, создавались типы к которым можно получить доступ. Этот процесс зависит от службы, которая доступна при написании кода.

В данном пошаговом руководстве рассмотрены следующие задачи: Необходимо выполнить их в том порядке, в котором они описаны в данном пошаговом руководстве.

  • Создание проекта

  • Настройка поставщика типов

  • Вызов веб-служб и обработка результатов

Создание проекта

На данном этапе создается проект и добавляются необходимые ссылки для использования поставщика типов языка WSDL.

Создание и настройка проекта F#

  1. Откройте новый проект консольного приложения F#.

  2. В Обозревателе решений откройте контекстное меню для узла Ссылка проекта, а затем выберите Добавить ссылку.

  3. В области Сборки выберите Framework, а затем в списке доступных сборок, выберите System.Runtime.Serialization и System.ServiceModel.

  4. В области Сборки выберите Расширения.

  5. В списке сборок выберите FSharp.Data.TypeProviders, а затем нажмите кнопку ОК для добавления ссылки на следующие сборки.

Настройка поставщика типов

На этом этапе используйте поставщик типов языка WSDL для создания типов для веб-службы TerraServer.

Настройка поставщика типов и создание типов

  1. Добавьте следующую строку кода для открытия пространства имен поставщиков типов.

    open System
    open System.ServiceModel
    open Microsoft.FSharp.Linq
    open Microsoft.FSharp.Data.TypeProviders
    
  2. Добавьте следующую строку кода для вызова поставщика типов с веб-службой. В данном примере используйте веб-службу TerraServer.

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

    Под данной строкой отображается красная волнистая линия, если служба URI записана некорректно или если служба выключена или не выполняет никаких действий. Если вы укажете на код, то сообщение об ошибке опишет проблему. Можно получить те же сведения в окне Список ошибок или в Окно вывода после сборки.

    Существует два способа для определения параметров конфигурации для подключения язык WSDL с помощью файла app.config проекта или с помощью статических типов параметров в объявлении поставщика типов. Можно использовать svcutil.exe для создания соответствующих элементов файла конфигурации. Дополнительные сведения об использовании svcutil.exe для создания информации о конфигурации для веб-службы см. в разделе Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe). Для полного описания статических типов параметров для поставщика типов языка WSDL см. раздел Поставщик типов WsdlService (F#).

Вызов веб-служб и обработка результатов

Каждая веб-служба имеет собственный набор типов, которые используются в качестве параметров для вызовов методов. На данном этапе подготовьте эти параметры, вызовите веб-метод и обработайте данные, которые он возвращает.

Вызов веб-службы и обработка результатов

  • Время ожидания веб-службы может истечь или веб-служба может прекратить свою работу, поэтому следует включать вызов веб-службы в блоке обработки исключений. Запишите следующий код, чтобы попытаться получить данные из веб-службы.

    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
    

    Обратите внимание, что вы создаете типы данных, которые необходимы для веб-службы как Place и Location, так и вложенные типы WsdlService типа TerraService.

См. также

Ссылки

Поставщик типов WsdlService (F#)

Другие ресурсы

Поставщики типов