Procedura dettagliata: accesso a un servizio Web tramite provider di tipi (F#)
In questa procedura dettagliata viene illustrato come utilizzare il provider di tipi Web disponibile in F# 3.0 per accedere a un servizio WSDL. In altri linguaggi.NET, si genera codice per accedere al servizio web chiamando svcutil.exe, o usando aggiungendo un riferimento Web in un progetto C#, ad esempio, per far si che Visual Studio chiami svcutil.exe automaticamente. In F#, è presente l'opzione aggiuntiva di usare il provider di tipo WSDL, così mentre si scrive il codice che crea il tipo WsdlService, i tipi vengono generati e diventano disponibili. Questo processo si basa sul servizio reso disponibile mentre si scrive il codice.
In questa procedura dettagliata vengono illustrate le attività seguenti: È necessario completarle in quest'ordine perché la procedura dettagliata venga eseguita correttamente:
Creazione del progetto
Configurazione del provider di tipo
Chiamare il servizio web ed elaborare i risultati
Creazione del progetto
Nel passaggio, creare un progetto e aggiungere i riferimenti appropriati per utilizzare un provider di tipo WSDL.
Per creare e configurare un progetto F#
Aprire un nuovo Progetto di applicazione console F#.
In Esplora soluzioni, aprire il menu di scelta rapida del nodo Riferimento del progetto e quindi scegliere Aggiungi riferimento.
Nell'area Assembly, scegliere Framework, quindi, nell'elenco degli assembly disponibili, scegliere System.Runtime.Serialization e System.ServiceModel.
Nell'area Assembly, scegliere Estensioni.
Nell'elenco degli assembly disponibili, scegliere FSharp.Data.TypeProviders, quindi premere OK per aggiungere riferimenti a questi assembly.
Configurazione del provider di tipo
In questo passaggio, si utilizza il provider di tipo WSDL per generare i tipi per il servizio web TerraServer.
Per configurare il provider di tipi e generare i tipi
Aggiungere la seguente riga di codice per aprire lo spazio dei nomi del provider di tipo.
open System open System.ServiceModel open Microsoft.FSharp.Linq open Microsoft.FSharp.Data.TypeProviders
Aggiungere la seguente riga di codice per richiamare il provider di tipo con un servizio web. In questo esempio, utilizzare il servizio web TerraServer.
type TerraService = WsdlService<"http://msrmaps.com/TerraService2.asmx?WSDL">
Una linea a zigzag rossa verrà visualizzata sotto la seguente riga di codice se l'URI del servizio non è stato digitato correttamente o se il servizio stesso non è attivo o non è in esecuzione. Se si punta il codice, un messaggio di errore descrive il problema. È possibile trovare le stesse informazioni nella finestra Elenco errori o nella Finestra di output dopo la compilazione.
Esistono due modi per specificare le impostazioni di configurazione di una connessione WSDL: utilizzando il file app.config del progetto o utilizzando parametri di tipi statici nella dichiarazione del provider di tipo. È possibile utilizzare svcutil.exe per generare gli elementi appropriati del file di configurazione. Per ulteriori informazioni sull'utilizzo di svcutil.exe per generare informazioni di configurazione per un servizio web, vedere Strumento ServiceModel Metadata Utility Tool (Svcutil.exe). Per una descrizione completa dei parametri statici per il provider di tipo WSDL, vedere Provider di tipo WsdlService (F#).
Chiamare il servizio web ed elaborare i risultati
Ogni servizio web ha il proprio set di tipi utilizzati come parametri per le chiamate al metodo. In questo passaggio, vengono preparati questi parametri, viene chiamato un metodo Web e vengono elaborate le informazioni che restituisce.
Per chiamare il servizio Web ed elaborare i risultati
Il servizio Web può scadere o arrestarsi, quindi si dovrebbe includere la chiamata al servizio Web in un blocco di gestione di un'eccezione. Scrivere il codice seguente per tentare di ottenere dati dal servizio Web.
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
Notare che si creano i tipi di dati necessari per il servizio web, come Place e Location, come i tipi annidati sotto il tipo WsdlService TerraService.
Vedere anche
Riferimenti
Provider di tipo WsdlService (F#)