연습: 형식 공급자를 사용하여 웹 서비스에 액세스(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# 프로젝트를 만들고 설정하는 방법
F# 콘솔 응용 프로그램 프로젝트를 새로 만듭니다.
솔루션 탐색기에서 프로젝트의 참조 노드에 대한 바로 가기 메뉴를 열고 참조 추가를 선택합니다.
어셈블리 영역에서 프레임워크를 선택하고, 사용할 수 있는 어셈블리 목록에서 System.Runtime.Serialization 및 System.ServiceModel을 선택합니다.
어셈블리 영역에서 확장을 선택합니다.
사용할 수 있는 어셈블리 목록에서 FSharp.Data.TypeProviders를 선택한 다음 확인 버튼을 선택하여 이러한 어셈블리에 참조를 추가합니다.
형식 공급자를 구성
이 단계에서는 WSDL 형식 공급자를 사용하여 TerraServer 웹 서비스에 대한 형식을 생성합니다.
형식 공급자를 구성하고 형식을 생성하는 방법
다음 코드 줄을 추가하여 형식 공급자 네임스페이스를 엽니다.
open System open System.ServiceModel open Microsoft.FSharp.Linq open Microsoft.FSharp.Data.TypeProviders
다음 코드 줄을 추가하여 웹 서비스로 형식 공급자를 호출합니다.이 예제에서 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 아래 중첩된 형식으로 생성합니다.