Servizi Windows Communication Foundation e dati WCF in Visual Studio
In Visual Studio 2008 vengono forniti gli strumenti per utilizzare Windows Communication Foundation (WCF) e WCF Data Services, le tecnologie Microsoft per la creazione di applicazioni distribuite. In questo argomento viene fornita un'introduzione ai servizi dalla prospettiva di Visual Studio.
Cos'è WCF
Windows Communication Foundation (WCF) è un framework unificato per la creazione di applicazioni distribuite sicure, affidabili, transazionali e interoperabili. Nelle versioni precedenti di Visual Studio erano incluse diverse tecnologie utilizzabili per le comunicazioni tra applicazioni.
Se si desiderava condividere informazioni in modo da consentirne l'accesso da qualsiasi piattaforma, si utilizzava un servizio Web, noto anche come servizio Web ASMX. Se si intendeva solo spostare i dati tra un client e un server che eseguiva il sistema operativo Windows, si utilizzava .NET Remoting. Se si desiderava stabilire comunicazioni transazionali, si utilizzava Enterprise Services (DCOM), oppure se si desiderava un modello di accodamento si utilizzava Accodamento messaggi (noto anche come MSMQ).
WCF unisce le funzionalità di tutte quelle tecnologie in un modello di programmazione unificato, semplificando l'esperienza dello sviluppo di applicazioni distribuite.
Cosa sono i servizi dati WCF
WCF Data Services sono servizi che interagiscono direttamente con un database, consentendo di restituire i dati utilizzando verbi HTTP standard quali GET, POST, PUT o DELETE. In generale WCF Data Services sono una buona scelta per le applicazioni utilizzate per creare, aggiornare o eliminare i record in un database. Per ulteriori informazioni, vedere Framework di ADO.NET Data Services (la pagina potrebbe essere in inglese).
Modello di programmazione di WCF
Il modello di programmazione di WCF si basa sulla comunicazione tra due entità: un servizio WCF e un client WCF. Il modello di programmazione è incapsulato nello spazio dei nomi System.ServiceModel in .NET Framework.
Servizio WCF
Un servizio WCF si basa su un'interfaccia che definisce un contratto tra il servizio e il client ed è contrassegnato con un attributo ServiceContractAttribute, come indicato nel codice seguente:
<ServiceContract()>
Public Interface IService1
[ServiceContract]
public interface IService1
<OperationContract()>
Function GetData(ByVal value As String) As String
[OperationContract]
string GetData(string value);
Si definiscono le funzioni o i metodi esposti da un servizio WCF contrassegnandoli con un attributo OperationContractAttribute. Inoltre è possibile esporre dati serializzati contrassegnando un tipo composto con un attributo DataContractAttribute, così da consentire l'associazione dati in un client.
Dopo essere stati definiti, l'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 un endpoint, che fornisce la sola modalità di comunicazione con il servizio. Non è infatti possibile accedere al servizio tramite un riferimento diretto come accade con le altre classi.
Un endpoint è costituito da un indirizzo, un'associazione e un contratto. L'indirizzo definisce dove si trova il servizio: può trattarsi di un URL, di un indirizzo FTP o di un percorso di rete o locale. Un'associazione definisce la modalità di comunicazione con il servizio. Le associazioni WCF forniscono un modello versatile per specificare un protocollo, ad esempio HTTP o FTP, un meccanismo di sicurezza, ad esempio Autenticazione di Windows o nomi utente e password e molto altro ancora. Un contratto include le operazioni esposte dalla classe del servizio WCF.
Per un servizio WCF possono essere esposti più endpoint. Ciò consente a client diversi di comunicare in modi differenti con lo stesso servizio. Ad esempio, un servizio tecnico bancario potrebbe fornire un endpoint per i dipendenti e un altro per i clienti esterni, con ogni endopint che utilizza 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 da 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 sui metodi esposti dal servizio. Nel caso di servizi che espongono più endpoint, il client può selezionare quello più adatto alle proprie necessità, ad esempio per comunicare su HTTP e utilizzare l'Autenticazione di Windows.
Dopo avere creato un client WCF, si fa riferimento al servizio nel codice proprio come avviene per qualsiasi altro oggetto. Ad esempio, per chiamare il metodo GetData mostrato precedentemente, si scrive del codice analogo al seguente:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim client As New ServiceReference1.Service1Client
Dim returnString As String
returnString = client.GetData(TextBox1.Text)
Label1.Text = returnString
End Sub
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 2008 fornisce gli strumenti utili per creare servizi WCF e client WCF. Per la procedura dettagliata che illustra tali strumenti, vedere Procedura dettagliata: creazione e accesso ai servizi WCF.
Creazione e test dei servizi WCF
È possibile utilizzare i modelli WCF di Visual Studio come base per creare rapidamente il proprio servizio. È quindi possibile utilizzare l'host automatico dei servizi WCF e il client di prova WCF per eseguire il debug e il test del servizio. Questi strumenti offrono congiuntamente un ciclo di debug e test rapido e comodo, ed eliminano la necessità di adottare un modello di hosting già nelle prime fasi.
Modelli WCF
I modelli WCF di Visual Studio forniscono una struttura di classe di base per lo sviluppo di servizi. Nella finestra di dialogo Aggiungi nuovo progetto sono disponibili vari modelli WCF, tra cui i progetti Libreria di servizi di WCF nonché i modelli di siti Web di servizi WCF e i modelli di elemento di servizi WCF.
Quando si seleziona un modello, vengono aggiunti i file per un contratto di servizio, un'implementazione del servizio e una configurazione del servizio. Tutti gli attributi necessari sono già presenti, così da avere a disposizione un tipo di servizio semplice per il quale non occorre scrivere il codice. Se lo si desidera, chiaramente, è possibile aggiungere codice per fornire funzioni e metodi per il servizio effettivo, ma i modelli forniscono la base.
Per ulteriori informazioni sui modelli WCF, vedere Modelli di Visual Studio WCF.
Host dei servizi WCF
Quando si avvia il debugger di Visual Studio (premendo F5) per un progetto di servizi WCF, lo strumento dell'host dei servizi WCF viene avviato automaticamente per ospitare localmente il servizio. L'host dei servizio WCF enumera i servizi in un progetto di servizi WCF, carica la configurazione del progetto e crea un'istanza di un host per ogni servizio trovato.
Utilizzando l'host dei servizi WCF è possibile testare un servizio WCF senza scrivere codice aggiuntivo o adottare un host specifico durante lo sviluppo.
Per ulteriori informazioni sull'host dei servizi WCF, vedere Host servizio WCF (WcfSvcHost.exe).
Client di prova WCF
Lo strumento Client di prova WCF consente di immettere i parametri di prova, inviare tale input a un servizio WCF e visualizzare la risposta che il servizio restituisce. Lo strumento offre una efficiente modalità di testing dei servizi se abbinato all'host dei servizi WCF.
Quando si preme F5 per eseguire il debug di un progetto di servizi WCF, il client di prova WCF si apre e visualizza un elenco di endpoint dei servizi 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 ulteriori informazioni sul client di prova WCF, vedere Client di test WCF (WcfTestClient.exe).
Accesso ai servizi WCF in Visual Studio
Visual Studio semplifica l'attività di creazione dei client WCF, viene automaticamente generato un proxy e un endpoint per i servizi aggiunti tramite Aggiungere il riferimento al servizio finestra di dialogo. Tutte le informazioni di configurazione necessarie vengono aggiunte al file app.config. Nella maggior parte dei casi è sufficiente creare un'istanza del servizio per utilizzarlo.
La finestra di dialogo Aggiungi riferimento al servizio consente di immettere l'indirizzo per un servizio o cercare un servizio definito nella soluzione. La finestra di dialogo restituisce l'elenco dei servizi e delle operazioni fornite da tali servizi. Consente inoltre di definire lo spazio dei nomi mediante il quale si farà riferimento ai servizi nel codice.
La finestra di dialogo Configura riferimento a servizio consente di personalizzare la configurazione di un servizio. È possibile modificare l'indirizzo di un servizio, specificare il livello di accesso, il comportamento asincrono e i tipi di contratto di messaggio nonché configurare il riutilizzo dei tipi.
Procedura: Selezionare un endpoint di servizi
Alcuni servizi WCF (Windows Communication Foundation) espongono più endpoint tramite i quali un client può comunicare con il servizio. È possibile ad esempio che un servizio esponga un endpoint che utilizza un'associazione HTTP e la sicurezza del nome utente/password e un secondo endpoint che utilizza FTP e Autenticazione di Windows. Il primo può essere utilizzato da applicazioni che accedono al servizio dall'esterno di un firewall, mentre il secondo può essere impiegato su una rete Intranet.
In un caso del genere, è possibile specificare endpointConfigurationName come parametro al costruttore per un riferimento al servizio.
Nota
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni vedere Personalizzazione delle impostazioni di sviluppo in Visual Studio.
Per selezionare un endpoint di servizio
Aggiungere un riferimento a un servizio WCF. Per ulteriori informazioni, vedere Procedura: aggiungere, aggiornare o rimuovere un riferimento al servizio.
Nell'editor di codice aggiungere un costruttore per il riferimento al servizio.
Dim proxy As New ServiceReference.Service1Client(
ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
Nota
Sostituire RiferimentoServizio con lo spazio dei nomi del riferimento al servizio e sostituire ClientServizio1 con il nome del servizio.
Verrà visualizzato un elenco IntelliSense con gli overload per il costruttore. Selezionare l'overload endpointConfigurationName As String.
Subito dopo l'overload, digitare = NomeConfigurazione, dove NomeConfigurazione è il nome dell'endpoint che si desidera utilizzare
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
In Esplora soluzioni fare clic con il pulsante destro del mouse sul file app.config del progetto che contiene il riferimento al servizio, quindi scegliere Apri. Il file verrà visualizzato nell'editor di codice.
Cercare il tag <Client> nel file.
Cercare al di sotto del tag <Client> un tag che inizi con <Endpoint>.
Se il riferimento al servizio fornisce più endpoint, saranno presenti due o più tag <Endpoint.
All'interno del tag <EndPoint> è disponibile un parametro name="NomeServizio" (dove NomeServizio rappresenta un nome dell'endpoint). Si tratta del nome per l'endpoint che può essere passato all'overload endpointConfigurationName As String di un costruttore per un riferimento al servizio.
Procedura: Per chiamare un metodo di servizio in modo asincrono
La maggior parte dei metodi nei servizi Windows Communication Foundation (WCF) possono essere chiamati in modo sincrono o asincrono. Quando si chiama un metodo in modo asincrono, è possibile continuare ad eseguire l’applicazione purché si utilizzi una connessione lenta.
Per impostazione predefinita, quando si aggiunge un riferimento a un servizio a un progetto, questo è configurato per chiamare i metodi in maniera asincrona. È possibile modificare il comportamento di chiamata asincrona ai metodi modificando un'impostazione nella finestra di dialogo Configura riferimento a servizio.
Nota
Questa opzione viene impostata in base al servizio.Se uno metodo di un servizio viene chiamato in modo asincrono, tutti i metodi dovranno essere chiamati in modo asincrono.
Nota
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni vedere Personalizzazione delle impostazioni di sviluppo in Visual Studio.
Per chiamare un metodo di servizio in modo asincrono
In Esplora soluzioni selezionare il riferimento al servizio.
Scegliere Configura riferimento a servizio dal menu Progetto.
Nella finestra di dialogo Configura riferimento a servizio selezionare la casella di controllo Genera operazioni asincrone.
Procedura: Associare i dati restituiti da un servizio
È possibile associare i dati restituiti da un servizio Windows Communication Foundation (WCF) a un controllo come qualsiasi altra origine dati. Quando si aggiunge un riferimento a un servizio WCF contenente tipi compositi che restituiscono dati, questi vengono aggiunti automaticamente alla finestra Origini dati.
Per associare un controllo a un singolo campo dati restituito da un servizio WCF
Scegliere Mostra origini dati dal menu Dati. Verrà visualizzata la finestra Origini dati.
Nella finestra Origini dati espandere il nodo relativo al riferimento al servizio. Verranno visualizzati tutti i tipi compositi restituiti dal servizio.
Espandere un nodo per un tipo. Verranno visualizzati i campi di dati relativi a questo tipo.
Selezionare un campo e fare clic sulla freccia a discesa per visualizzare un elenco di controlli disponibili per il tipo di dati.
Fare clic sul tipo di controllo a cui si desidera effettuare l’associazione.
Trascinare il campo su un form. Il controllo verrà aggiunto al form insieme a un componente BindingSource e un componente BindingNavigator.
Ripetere i passaggi da 4 a 6 per ogni campo che si desidera associare.
Per associare un controllo a un tipo composito restituito da un servizio WCF
Scegliere Mostra origini dati dal menu Dati. Verrà visualizzata la finestra Origini dati.
Nella finestra Origini dati espandere il nodo relativo al riferimento al servizio. Verranno visualizzati tutti i tipi compositi restituiti dal servizio.
Selezionare un nodo per tipo e fare clic sulla freccia a discesa per visualizzare un elenco di opzioni disponibili.
Fare clic su DataGridView per visualizzare i dati in una griglia oppure su Dettagli per visualizzare i dati in singoli controlli.
Trascinare il nodo nel form. I controlli verranno aggiunti al form insieme a un componente BindingSource e un componente BindingNavigator.
Procedura: configurare un servizio riutilizzare i tipi esistenti
Quando si aggiunge un riferimento al servizio a un progetto, tutti i tipi definiti nel servizio verranno generati nel progetto locale. Quando un servizio utilizza tipi .NET Framework comuni o quando i tipi sono definiti in una libreria condivisa, vengono spesso creati tipi duplicati.
Per evitare questo problema, i tipi negli assembly a cui si fa riferimento vengono condivisi per impostazione predefinita. Se si desidera disabilitare la condivisione dei tipi per uno o più assembly, utilizzare la finestra di dialogo Configura riferimenti a servizio.
Per disabilitare la condivisione dei tipi in un solo assembly
In Esplora soluzioni selezionare il riferimento al servizio.
Scegliere Configura riferimento a servizio dal menu Progetto.
Nella finestra di dialogo Configura riferimenti a servizio selezionare Riutilizza tipi negli assembly di riferimento specificati.
Selezionare la casella di controllo relativa a ogni assembly in cui si desidera abilitare la divisione dei tipi. Per disabilitare la condivisione dei tipi per un assembly, lasciare la casella di controllo deselezionata.
Per disabilitare la condivisione dei tipi in tutti gli assembly
In Esplora soluzioni selezionare il riferimento al servizio.
Scegliere Configura riferimento a servizio dal menu Progetto.
Nella finestra di dialogo Configura riferimenti a servizio deselezionare la casella di controllo Riutilizza tipi negli assembly di riferimento specificati.
Argomenti correlati
Titolo |
Descrizione |
---|---|
Viene fornita una spiegazione dettagliata della procedura di creazione e utilizzo dei servizi WCF in Visual Studio. |
|
Procedura dettagliata: creazione e accesso a un servizio dati WCF in Visual Studio |
Viene fornita una spiegazione dettagliata sulla creazione e sull'utilizzo di WCF Data Services in Visual Studio. |
Viene descritta la modalità di creazione ed esecuzione di test dei servizi WCF in Visual Studio. |
|
Procedura: aggiungere, aggiornare o rimuovere un riferimento al servizio |
Viene descritto come aggiungere, aggiornare o rimuovere servizi WCF da un progetto. |
Procedura: aggiungere, aggiornare o rimuovere un riferimento al servizio dati WCF |
Viene illustrato come fare riferimento e utilizzare WCF Data Services in Visual Studio. |
Viene illustrato come aggiungere a un progetto un riferimento a un servizio Web XML (ASMX). |
|
Risoluzione dei problemi relativi ai riferimenti al servizio |
Vengono presentati alcuni errori comuni che possono verificarsi nei riferimenti ai servizi e viene spiegato come evitarli. |
Vengono descritti alcuni problemi di debug comuni e vengono illustrate varie tecniche per il debug di servizi WCF. |
|
Windows Communication Foundation Authentication Service Overview |
Viene descritto come utilizzare WCF per fornire un servizio ruolo di un sito Web. |
Viene descritto il supporto per il livello d messaggistica WCF in .NET Compact Framework. |
|
Procedura dettagliata: creazione di un'applicazione dati a più livelli |
Vengono fornite istruzioni dettagliate per la creazione di un dataset tipizzato e la separazione del codice dei TableAdapter e dei dataset in più progetti. |
Vengono descritti gli elementi dell'interfaccia utente della finestra di dialogo Aggiungi riferimento al servizio. |
|
Vengono descritti gli elementi dell'interfaccia utente della finestra di dialogo Configura riferimento a servizio. |