Condividi tramite


Provider di tipo WsdlService (F#)

Fornisce i tipi per un servizio web WSDL (Web Services Description Language).

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>

Parametri statici di tipo

Parametro di tipo

Descrizione

ServiceUri: string

L'URI del servizio web.

?LocalSchemaFile : string

Un file .wsdlschema per archiviare localmente lo schema del servizio memorizzato nella cache.

?ForceUpdate : bool

Richiede che un collegamento diretto al servizio sia disponibile in fase di progettazione e forza l'aggiornamento del file di schema locale. L'impostazione predefinita è true. Quando ForceUpdate è false, il provider risponde alle modifiche in LocalSchemaFile.

?MessageContract : bool

Se true, genera i tipi di Message Contract. Il valore predefinito è false.

?EnableDataBinding : bool

Se true, i tipi di Data Contract generati implementano l'interfaccia INotifyPropertyChanged per abilitare l'associazione dati.

?Serializable : bool

Se true, i tipi generati sono serializzabili. Il valore predefinito è false. Se questa proprietà è impostata su true, i tipi generati hanno applicato l'attributo Serializable.

?Async : bool

Se true, genera le firme dei metodi sia sincroni che asincroni. Il valore predefinito è false.

?CollectionType : string

Un nome completo o assembly-qualified del tipo da utilizzare come tipo di dati di una raccolta quando il codice viene generato dagli schemi.

Note

Per una procedura dettagliata che illustra come utilizzare il provider di tipo, vedere Procedura dettagliata: accesso a un servizio Web tramite provider di tipi (F#).

Informazioni su WSDL

WSDL è un linguaggio basato su XML per la descrizione dei servizi web. Le chiamate di metodo o di funzione dell'esposizione di servizi Web attraverso una rete e, in caso di WSDL, internet. WSDL viene utilizzato dai servizi per fornire una descrizione delle chiamate di funzioni disponibili nel servizio e sui tipi di dati collegati. Il provider del tipo WSDL consente l'utilizzo dei tipi di dati da qualsiasi servizio WSDL direttamente nel codice, senza doverli ricreare per ogni servizio.

Un documento WSDL contiene la descrizione per un servizio web. I documenti sono in formato XML e contengono le definizioni delle interfacce e le operazioni disponibili, i messaggi e i tipi di dati utilizzati e le informazioni sugli endpoint di rete, ad esempio gli URI, le porte e i protocolli utilizzati. Un documento WSDL dispone di due sezioni importanti, le definizioni astratte delle interfacce, i relativi tipi, le operazioni e i messaggi, e la sezione relativa alle associazioni.

Le interfacce WSDL, note anche come portTypes, sono raggruppamenti di operazioni. Le operazioni sono simili ai metodi in un'interfaccia. Le operazioni, come i metodi, possono avere parametri e valori restituiti. Le operazioni vengono descritte nel documento WSDL in un form astratto che non è specifico per il protocollo utilizzato. La sezione relativa alle associazioni del documento WSDL descrive il modo in cui le interfacce sono esposte come servizi web, con un endpoint o porta e protocollo specifico. Il protocollo utilizzato con WSDL in genere è un SOAP (Simple Object Access Protocol) via HTTP. Il protocollo SOAP consente la codifica di tipi object-oriented e metodi.

WSDL 2.0 è una revisione significativa del protocollo WSDL.

Per ulteriori informazioni, vedere Understanding WSDL.

Riguardo al Provider di tipo WSDL

Il provider di tipo WSDL consente di programmare su un servizio web con un set di tipi generati automaticamente. In background, il compilatore esegue svcutil.exe per generare i tipi che è possibile utilizzare per accedere al servizio web. Vengono generati dichiarando il provider di tipo nel codice F# per il servizio. Le seguenti righe di codice illustrano quanto appena detto:

 
type terraService = WsdlService<"http://www.terraserver-usa.com/TerraServer2.asmx?WSDL">
let terraClient = terraService.GetTerraServiceSoap ()

L'oggetto del servizio nasconde i dettagli del protocollo SOAP ed espone la funzionalità del server web al codice client. L'oggetto del servizio viene definita come client SOAP perché il suo compito è di interagire con il server utilizzando il protocollo SOAP per chiamare le operazioni del servizio web. È analogo ai tipi creati eseguendo wsdl.exe ed eredita da ClientBase. Gli oggetti client contengono non solo i metodi ereditati dalla classe base ma anche i metodi Web forniti dal servizio web.

Gli argomenti statici DataContractOnly, EnableDataBinding, MessageContract, Async, CollectionType e DataContractSerializer riguardano gli argomenti della riga di comando con nomi simili forniti a svcutil.exe. Per ulteriori informazioni sull'effetto di questi argomenti, vedere Strumento ServiceModel Metadata Utility Tool (Svcutil.exe). I tipi necessari per il servizio vengono generati nel tipo WsdlService in ServiceTypes.

È necessario aggiungere un riferimento all'assembly System.ServiceModel per utilizzare il provider del tipo WsdlService. Potrebbe anche essere necessario System.Runtime.Serialization.

I tipi utilizzati per i metodi Web sono inclusi in una serie di tipi annidati sotto ServiceTypes.

Esempio

Il seguente esempio illustra come utilizzare il provider di tipo WsdlService per chiamare un metodo su un servizio web, in questo caso, TerraServer il sito pubblicato da 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

Output

  

Piattaforme

Windows 8, Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informazioni sulla versione

Versioni della libreria di base di F#

Supportato in: 2.0, 4.0, portabile

Vedere anche

Attività

Procedura dettagliata: accesso a un servizio Web tramite provider di tipi (F#)

Riferimenti

Spazio dei nomi Microsoft.FSharp.Data.TypeProviders (F#)

Concetti

Strumento ServiceModel Metadata Utility Tool (Svcutil.exe)