WsdlService Type Provider (F#)
Provides the types for a WSDL (Web Services Description Language) web service.
Namespace/Module Path: Microsoft.FSharp.Data.TypeProviders
Assembly: FSharp.Data.TypeProviders (in FSharp.Data.TypeProviders.dll)
type WsdlService<ServiceUri : string, ?LocalSchemaFile : string, ?ForceUpdate : bool ?MessageContract : bool, ?EnableDataBinding : bool, ?Serializable : bool, ?Async : bool, ?CollectionType : string>
ServiceUri : string
The URI for the web service.
?LocalSchemaFile : string
A .wsdlschema file to store locally cached service schema.
?ForceUpdate : bool
Requires that a direct connection to the service is available at design-time and force the refresh of the local schema file. The default is true. When ForceUpdate is false, the provider reacts to changes in the LocalSchemaFile.
?MessageContract : bool
If true, generates Message Contract types. The default value is false.
?EnableDataBinding : bool
If true, the generated Data Contract types implement the INotifyPropertyChanged interface to enable data binding.
?Serializable : bool
If true, the generated types are serializable. The default is false. If this is set to true, the generated types have the Serializable attribute applied.
?Async : bool
If true, generates both synchronous and asynchronous method signatures. The default value is false.
?CollectionType : string
A fully qualified or assembly-qualified name of the type to use as a collection data type when code is generated from schemas.
For a walkthrough that shows how to use this type provider, see Walkthrough: Accessing a Web Service by Using Type Providers (F#).
WSDL is an XML-based language for describing web services. Web services expose method calls or function calls over a network and, in the case of WSDL, the Internet. WSDL is used by services to provide a description of the function calls available on the service and the associated data types. The WSDL type provider allows you to use data types from any WSDL service immediately in your code, without the usual overhead of creating them for each service.
A WSDL document contains the description for a web service. WSDL documents are in the XML format and contain definitions of the interfaces and operations offered, the messages and data types used, and information about networking endpoints, such as the URIs, ports, and protocols used. A WSDL document has two major sections, the abstract definitions of the interfaces, their types, operations, and messages, and the bindings section.
WSDL interfaces, also known as portTypes, are groupings of operations. Operations are like methods on an interface. Operations, like methods, can have parameters and return values. The operations are described in the WSDL document in an abstract form that is not specific to the protocol used. The bindings section of the WSDL document describes how the interfaces are exposed as web services, through a specific endpoint, or port and protocol. The protocol used with WSDL is typically SOAP (Simple Object Access Protocol) over HTTP. The SOAP protocol provides a way of encoding object-oriented types and methods.
WSDL 2.0 is a significant revision of the WSDL protocol.
For more information see, Understanding WSDL.
The WSDL type provider allows you to program against a web service with a set of auto-generated types. Behind the scenes, the compiler runs svcutil.exe to generate types that you can use to access the web service. They are generated by declaring the type provider in F# code for the service. The following lines of code illustrate this:
type terraService = WsdlService<"http://www.terraserver-usa.com/TerraServer2.asmx?WSDL"> let terraClient = terraService.GetTerraServiceSoap ()
The service object hides the details of the SOAP protocol and exposes the functionality of the web server to client code. The service object is referred to as a SOAP client because its job is to interact with the server by using the SOAP protocol to call web service operations. It is analogous to the types created by running wsdl.exe and inherits from ClientBase. The client objects contain not only the inherited methods from its base class but also the web methods provided by the web service.
The static arguments DataContractOnly, EnableDataBinding, MessageContract, Async, CollectionType, and DataContractSerializer affect the command-line arguments with similar names given to svcutil.exe. For more information on the effect of these arguments, see ServiceModel Metadata Utility Tool (Svcutil.exe). Types required for the service are generated under the WsdlService type under ServiceTypes.
You must add a reference to the assembly System.ServiceModel to use the WsdlService type provider. You might also need System.Runtime.Serialization.
The types that are used for the web methods are included in a series of nested types under ServiceTypes.
The following example shows how to use the WsdlService type provider to call a method on a web service, in this case, the TerraServer site published by Microsoft Research.
open System open System.ServiceModel open Microsoft.FSharp.Linq open Microsoft.FSharp.Data.TypeProviders type terraService = Microsoft.FSharp.Data.TypeProviders.WsdlService<"http://terraserver-usa.com/TerraService2.asmx?WSDL"> 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 Console.WriteLine("Press any key to continue..."); Console.ReadLine() |> ignore
Redmond: Latitude: 47.669998 Longitude: -122.110001 Press any key to continue...