다음을 통해 공유


연습: 형식 공급자를 사용하여 웹 서비스에 액세스(F#)

이 연습에서는 F# 3.0에서 사용할 수 있는 WSDL(Web Services Description Language) 형식 공급자를 사용하여 WSDL 서비스에 액세스하는 방법을 보여줍니다.다른 .NET 언어에서 svcutil.exe를 호출하거나 웹 참조 추가 옵션을 사용하여 웹 서비스에 액세스하는 코드를 생성합니다. 예를 들어 C# 프로젝트에서는 Visual Studio에서 svcutil.exe를 호출합니다.F#에서 WSDL 형식 공급자를 사용하는 추가 옵션이 있으므로 WsdlService 형식을 만드는 코드를 작성하는 즉시 형식이 생성되고 사용할 수 있게 됩니다.이 프로세스는 코드를 작성할 때 사용할 수 있는 서비스에 의존합니다.

이 연습에서는 다음 작업을 수행합니다.이 연습을 완료하려면 이 순서대로 수행해야 합니다.

  • Creating the project

  • Configuring the type provider

  • Calling the web service, and processing the results

프로젝트 만들기

이 단계에서 WSDL 형식 공급자를 사용하려면 프로젝트를 만들고 적절한 참조를 추가합니다.

F# 프로젝트를 만들고 설정하는 방법

  1. F# 콘솔 응용 프로그램 프로젝트를 새로 만듭니다.

  2. 솔루션 탐색기에서 프로젝트의 참조 노드에 대한 바로 가기 메뉴를 열고 참조 추가를 선택합니다.

  3. 어셈블리 영역에서 프레임워크를 선택하고, 사용할 수 있는 어셈블리 목록에서 System.Runtime.SerializationSystem.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의 철자가 잘못되었거나 서비스 자체가 다운되었거나 수행되지 않는 경우 빨간색 물결선이 이 코드 줄 아래 나타납니다.코드를 가리키는 경우 오류 메시지는 문제를 설명합니다.빌드한 후에 출력 창오류 목록 창에서 같은 정보를 볼 수 있습니다.

    프로젝트용 app.config 파일 사용하거나 형식 공급자 선언에서 정적 형식 매개 변수를 사용하여 WSDL 연결에 대해 구성 설정을 지정하는 두 가지 방법이 있습니다.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#)

기타 리소스

형식 공급자