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


Пошаговое руководство. Доступ к веб-службе с помощью поставщиков типов (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#)

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

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