Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

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:

Nel passaggio, creare un progetto e aggiungere i riferimenti appropriati per utilizzare un provider di tipo WSDL.

Per creare e configurare un progetto F#

  1. Aprire un nuovo Progetto di applicazione console F#.

  2. In Esplora soluzioni, aprire il menu di scelta rapida del nodo Riferimento del progetto e quindi scegliere Aggiungi riferimento.

  3. Nell'area Assembly, scegliere Framework, quindi, nell'elenco degli assembly disponibili, scegliere System.Runtime.Serialization e System.ServiceModel.

  4. Nell'area Assembly, scegliere Estensioni.

  5. Nell'elenco degli assembly disponibili, scegliere FSharp.Data.TypeProviders, quindi premere OK per aggiungere riferimenti a questi assembly.

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

  1. 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
    
  2. 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#).

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.

Aggiunte alla community

Mostra: