Condividi tramite


Servizi Windows Communication Foundation e dati WCF in Visual Studio

Visual Studio offre strumenti per l'uso di Windows Communication Foundation (WCF) e WCF Data Services, tecnologie Microsoft per la creazione di applicazioni distribuite. In questo argomento viene fornita un'introduzione ai servizi dal punto di vista di Visual Studio. Per la documentazione completa, vedere WCF Data Services 4.5.

Che cos'è WCF?

Windows Communication Foundation (WCF) è un framework unificato per la creazione di applicazioni distribuite distribuite sicure, affidabili, transazioni e interoperabili. Sostituisce tecnologie di comunicazione interprocesso meno recenti, ad esempio servizi Web ASMX, comunicazione remota .NET, Enterprise Services (Distributed Component Object Model (DCOM) e Microsoft Message Queue (MSMQ). WCF riunisce le funzionalità di tutte queste tecnologie in un modello di programmazione unificato. Ciò semplifica l'esperienza di sviluppo di applicazioni distribuite.

Che cosa sono WCF Data Services

WCF Data Services è un'implementazione dello standard OData (Open Data Protocol). WCF Data Services consente di esporre dati tabulari come set di API REST, consentendo di restituire dati usando verbi HTTP standard, ad esempio GET, POST, PUT o DELETE. Sul lato server WCF Data Services viene sostituito da API Web ASP.NET per la creazione di nuovi servizi OData. La libreria client di WCF Data Services continua a essere una scelta ottimale per l'utilizzo di servizi OData in un'applicazione .NET da Visual Studio (>Riferimento al servizio di aggiunta progetto). Per altre informazioni, vedere WCF Data Services 4.5.

Modello di programmazione WCF

Il modello di programmazione WCF si basa sulla comunicazione tra due entità: un servizio WCF e un client WCF. Il modello di programmazione viene incapsulato nello spazio dei System.ServiceModel nomi in .NET.

Servizio WCF

Un servizio WCF si basa su un'interfaccia che definisce un contratto tra il servizio e il client. È contrassegnato con un ServiceContractAttribute attributo, come illustrato nel codice seguente:

[ServiceContract]
public interface IService1

È possibile definire funzioni o metodi esposti da un servizio WCF contrassegnandoli con un OperationContractAttribute attributo .

[OperationContract]
string GetData(string value);

Inoltre, è possibile esporre i dati serializzati contrassegnando un tipo composito con un DataContractAttribute attributo . In questo modo viene abilitato il data binding in un client.

Dopo aver definito un'interfaccia e i relativi metodi, vengono incapsulati in una classe che implementa l'interfaccia . Una singola classe di servizio WCF può implementare più contratti di servizio.

Un servizio WCF viene esposto per l'utilizzo tramite ciò che è noto come endpoint. L'endpoint fornisce l'unico modo per comunicare con il servizio; non è possibile accedere al servizio tramite un riferimento diretto come si farebbe con altre classi.

Un endpoint è costituito da un indirizzo, un'associazione e un contratto. L'indirizzo definisce dove si trova il servizio; potrebbe trattarsi di un URL, di un indirizzo FTP (File Transfer Protocol) o di una rete o di un percorso locale. Un'associazione definisce il modo in cui si comunica con il servizio. Le associazioni WCF offrono un modello versatile per specificare un protocollo, ad esempio HTTP o FTP, un meccanismo di sicurezza come l'autenticazione di Windows o i nomi utente e le password e molto altro ancora. Un contratto include le operazioni esposte dalla classe del servizio WCF.

È possibile esporre più endpoint per un singolo servizio WCF. Ciò consente a client diversi di comunicare con lo stesso servizio in modi diversi. Ad esempio, un servizio bancario potrebbe fornire un endpoint per i dipendenti e un altro per i clienti esterni, ognuno con un indirizzo, un'associazione e/o un contratto diversi.

Client WCF

Un client WCF è costituito da un proxy che consente a un'applicazione di comunicare con un servizio WCF e un endpoint che corrisponde a un endpoint definito per il servizio. Il proxy viene generato sul lato client nel file app.config e include informazioni sui tipi e i metodi esposti dal servizio. Per i servizi che espongono più endpoint, il client può selezionare quello più adatto alle proprie esigenze, ad esempio per comunicare tramite HTTP e usare l'autenticazione di Windows.

Dopo aver creato un client WCF, fare riferimento al servizio nel codice esattamente come qualsiasi altro oggetto. Ad esempio, per chiamare il GetData metodo illustrato in precedenza, scrivere codice simile al seguente:

private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

Strumenti WCF in Visual Studio

Visual Studio offre strumenti che consentono di creare sia servizi WCF che client WCF. Per una procedura dettagliata che illustra gli strumenti, vedere Procedura dettagliata: Creazione di un semplice servizio WCF in Windows Form.

Creare e testare i servizi WCF

È possibile usare i modelli di Visual Studio WCF come base per creare rapidamente il proprio servizio. È quindi possibile usare l'host automatico del servizio WCF e il client di test WCF per eseguire il debug e testare il servizio. Questi strumenti offrono un ciclo di debug e test rapido e pratico ed eliminano il requisito di eseguire il commit in un modello di hosting in una fase iniziale.

Modelli WCF

I modelli di Visual Studio WCF offrono una struttura di classe di base per lo sviluppo di servizi. Nella finestra di dialogo Aggiungi nuovo progetto sono disponibili diversi modelli WCF. Tra questi sono inclusi i progetti di libreria di servizi WCF, i siti Web dei servizi WCF e i modelli di elemento del servizio WCF.

Quando si seleziona un modello, i file vengono aggiunti per un contratto di servizio, un'implementazione del servizio e una configurazione del servizio. Tutti gli attributi necessari sono già stati aggiunti, creando un semplice tipo di servizio "Hello World" e non è necessario scrivere codice. Naturalmente, si vuole aggiungere codice per fornire funzioni e metodi per il servizio reale, ma i modelli forniscono le basi di base.

Per altre informazioni sui modelli WCF, vedere Modelli di Visual Studio WCF.

Host servizio WCF

Quando si avvia il debugger di Visual Studio (premendo F5) per un progetto di servizio WCF, lo strumento host del servizio WCF viene avviato automaticamente per ospitare il servizio in locale. Host servizio WCF enumera i servizi in un progetto di servizio WCF, carica la configurazione del progetto e crea un'istanza di un host per ciascun servizio che trova.

Usando l'host del servizio WCF, è possibile testare un servizio WCF senza scrivere codice aggiuntivo o eseguire il commit in un host specifico durante lo sviluppo.

Per altre informazioni sull'host del servizio WCF, vedere Host del servizio WCF (WcfSvcHost.exe).

Client di prova WCF

Lo strumento client di test WCF consente di immettere parametri di test, inviare tale input a un servizio WCF e visualizzare la risposta restituita dal servizio. Offre un'esperienza pratica di test del servizio quando la si combina con l'host del servizio WCF. Trovare lo strumento nella cartella %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE .

Quando si preme F5 per eseguire il debug di un progetto di servizio WCF, il client di test WCF viene aperto e viene visualizzato un elenco di endpoint di servizio definiti nel file di configurazione. È possibile testare i parametri e avviare il servizio e ripetere questo processo per testare e convalidare continuamente il servizio.

Per altre informazioni sul client di test WCF, vedere Client di test WCF (WcfTestClient.exe).

Accesso ai servizi WCF in Visual Studio

Visual Studio semplifica l'attività di creazione di client WCF, generando automaticamente un proxy e un endpoint per i servizi aggiunti tramite la finestra di dialogo Aggiungi riferimento al servizio . Tutte le informazioni di configurazione necessarie vengono aggiunte al file app.config . Nella maggior parte dei casi, tutto ciò che devi fare è creare un'istanza del servizio per usarlo.

La finestra di dialogo Aggiungi riferimento al servizio consente di immettere l'indirizzo di un servizio o di cercare un servizio definito nella soluzione. La finestra di dialogo restituisce un elenco di servizi e le operazioni fornite da tali servizi. Consente inoltre di definire lo spazio dei nomi in base al quale si farà riferimento ai servizi nel codice.

La finestra di dialogo Configura riferimenti al servizio consente di personalizzare la configurazione per un servizio. È possibile modificare l'indirizzo per un servizio, specificare il livello di accesso, il comportamento asincrono e i tipi di contratto messaggio e configurare il riutilizzo del tipo.

Selezionare un endpoint di servizio

Alcuni servizi di Windows Communication Foundation (WCF) espongono più endpoint tramite cui un client potrebbe comunicare con il servizio. Ad esempio, un servizio potrebbe esporre un endpoint che usa un'associazione HTTP e la sicurezza del nome utente e della password e un secondo endpoint che usa FTP e autenticazione di Windows. Il primo endpoint può essere usato dalle applicazioni che accedono al servizio dall'esterno di un firewall, mentre il secondo potrebbe essere usato in una intranet.

In questo caso, è possibile specificare come endpointConfigurationName parametro per il costruttore per un riferimento al servizio.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio in questo articolo potrebbero essere diversi nel computer in uso. È possibile usare un'edizione diversa di Visual Studio o impostazioni di ambiente diverse. Per altre informazioni, vedere Personalizzare l'IDE.

Per selezionare un endpoint di servizio

  1. Aggiungere un riferimento a un servizio WCF facendo clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliendo Aggiungi riferimento al servizio.

  2. Nell'editor di codice aggiungere un costruttore per il riferimento al servizio:

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    Nota

    Sostituire ServiceReference con lo spazio dei nomi per il riferimento al servizio e sostituire Service1Client con il nome del servizio.

  3. Viene visualizzato un elenco IntelliSense che include gli overload per il costruttore. Selezionare l'overload endpointConfigurationName As String .

  4. Dopo l'overload digitare = ConfigurationName, dove ConfigurationName è il nome dell'endpoint da usare.

    Nota

    Se non si conoscono i nomi degli endpoint disponibili, è possibile trovarli nel file app.config .

Per trovare gli endpoint disponibili per un servizio WCF

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file app.config per il progetto che contiene il riferimento al servizio e quindi scegliere Apri. Il file viene visualizzato nell'editor di codice.

  2. Cercare il <Client> tag nel file.

  3. Cercare sotto il <Client> tag un tag che inizia con <Endpoint>.

    Se il riferimento al servizio fornisce più endpoint, saranno presenti due o più <Endpoint tag.

  4. All'interno del <EndPoint> tag è disponibile un name="parametro SomeService" (dove SomeService rappresenta un nome endpoint). Si tratta del nome dell'endpoint che può essere passato all'overload endpointConfigurationName As String di un costruttore per un riferimento al servizio.

Chiamare un metodo del servizio in modo asincrono

La maggior parte dei metodi nei servizi Windows Communication Foundation (WCF) può essere chiamata in modo sincrono o asincrono. La chiamata a un metodo in modo asincrono consente all'applicazione di continuare a funzionare mentre il metodo viene chiamato quando opera su una connessione lenta.

Per impostazione predefinita, quando un riferimento al servizio viene aggiunto a un progetto, è configurato per chiamare i metodi in modo sincrono. È possibile modificare il comportamento in modo da chiamare i metodi in modo asincrono modificando un'impostazione nella finestra di dialogo Configura riferimento al servizio.

Nota

Questa opzione viene impostata in base al servizio. Se un metodo per un servizio viene chiamato in modo asincrono, tutti i metodi devono essere chiamati in modo asincrono.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio in questo articolo potrebbero essere diversi nel computer in uso. È possibile usare un'edizione diversa di Visual Studio o impostazioni di ambiente diverse. Per altre informazioni, vedere Personalizzare l'IDE.

Per chiamare un metodo del servizio in modo asincrono

  1. In Esplora soluzioni selezionare il riferimento al servizio.

  2. Scegliere Configura riferimento al servizio dal menu Progetto.

  3. Nella finestra di dialogo Configura riferimento al servizio selezionare la casella di controllo Genera operazioni asincrone.

Associare i dati restituiti da un servizio

È possibile associare i dati restituiti da un servizio Windows Communication Foundation (WCF) a un controllo così come è possibile associare qualsiasi altra origine dati a un controllo. Quando si aggiunge un riferimento a un servizio WCF, se il servizio contiene tipi compositi che restituiscono dati, vengono aggiunti automaticamente alla finestra Origini dati.

Per associare un controllo a un singolo campo dati restituito da un servizio WCF

  1. Scegliere Mostra origini dati dal menu Dati.

    Viene visualizzata la finestra Origini dati.

  2. Nella finestra Origini dati espandere il nodo per il riferimento al servizio. Qualsiasi tipo composito restituito dalla visualizzazione del servizio.

  3. Espandere un nodo per un tipo. Vengono visualizzati i campi dati per quel tipo.

  4. Selezionare un campo e fare clic sulla freccia dell'elenco a discesa per visualizzare un elenco di controlli disponibili per il tipo di dati.

  5. Fare clic sul tipo di controllo a cui si desidera eseguire l'associazione.

  6. Trascinare il campo in un modulo. Il controllo viene aggiunto al form, insieme a un BindingSource componente e a un BindingNavigator componente.

  7. Ripetere i passaggi da 4 a 6 per tutti gli altri campi da associare.

Per associare un controllo al tipo composito restituito da un servizio WCF

  1. Scegliere Mostra origini dati dal menu Dati. Viene visualizzata la finestra Origini dati.

  2. Nella finestra Origini dati espandere il nodo per il riferimento al servizio. Qualsiasi tipo composito restituito dalla visualizzazione del servizio.

  3. Selezionare un nodo per un tipo e fare clic sulla freccia dell'elenco a discesa per visualizzare un elenco di opzioni disponibili.

  4. Fare clic su DataGridView per visualizzare i dati in una griglia o Dettagli per visualizzare i dati in singoli controlli.

  5. Trascinare il nodo nel form. I controlli vengono aggiunti al form, insieme a un BindingSource componente e a un BindingNavigator componente.

Configurare un servizio per riutilizzare i tipi esistenti

Quando un riferimento al servizio viene aggiunto a un progetto, tutti i tipi definiti nel servizio vengono generati nel progetto locale. In molti casi, questo crea tipi duplicati quando un servizio usa tipi .NET comuni o quando i tipi vengono definiti in una libreria condivisa.

Per evitare questo problema, i tipi negli assembly a cui si fa riferimento sono condivisi per impostazione predefinita. Se si desidera disabilitare la condivisione dei tipi per uno o più assembly, è possibile farlo nella finestra di dialogo Configura riferimenti al servizio.

Per disabilitare la condivisione dei tipi in un singolo assembly

  1. In Esplora soluzioni selezionare il riferimento al servizio.

  2. Scegliere Configura riferimento al servizio dal menu Progetto.

  3. Nella finestra di dialogo Configura riferimenti al servizio selezionare Riutilizza tipi negli assembly di riferimento specificati.

  4. Selezionare la casella di controllo per ogni assembly in cui si vuole abilitare la condivisione dei tipi. Per disabilitare la condivisione dei tipi per un assembly, lasciare deselezionata la casella di controllo.

Per disabilitare la condivisione dei tipi in tutti gli assembly

  1. In Esplora soluzioni selezionare il riferimento al servizio.

  2. Scegliere Configura riferimento al servizio dal menu Progetto.

  3. Nella finestra di dialogo Configura riferimenti al servizio deselezionare la casella di controllo Riutilizza tipi negli assembly a cui si fa riferimento.

Posizione Descrizione
Procedura dettagliata: creazione di un Windows Form semplice Fornisce una dimostrazione dettagliata della creazione e dell'uso di servizi WCF in Visual Studio.
Procedura dettagliata: Creazione di un servizio dati WCF con WPF ed Entity Framework Fornisce una dimostrazione dettagliata di come creare e usare WCF Data Services in Visual Studio.
Uso degli strumenti di sviluppo WCF Viene illustrato come creare e testare i servizi WCF in Visual Studio.
Procedura: Aggiungere, aggiornare o rimuovere un riferimento al servizio dati WCF
Risoluzione dei problemi relativi ai riferimenti al servizio Presenta alcuni errori comuni che possono verificarsi con i riferimenti al servizio e come impedirli.
Debug dei servizi WCF Vengono descritti i problemi e le tecniche di debug comuni che possono verificarsi durante il debug dei servizi WCF.
Procedura dettagliata: Creazione di un'applicazione dati a più livelli Fornisce istruzioni dettagliate per la creazione di un dataset tipizzato e la separazione del codice degli elementi TableAdapter e dataset in più progetti.
Finestra di dialogo Configura riferimento al servizio Descrive gli elementi dell'interfaccia utente della finestra di dialogo Configura riferimento al servizio.

Riferimento

Vedi anche