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#)