Condividi tramite


Informazioni sul codice client generato

ServiceModel Metadata Utility Tool (Svcutil.exe) genera il codice client e un file di configurazione dell'applicazione client da utilizzare per la creazione delle applicazioni client. In questo argomento viene fornita una panoramica degli esempi di codice generati per gli scenari del contratto di servizio standard. Per ulteriori informazioni sulla creazione di un'applicazione client utilizzando il codice generato, vedere Panoramica dei client WCF.

Panoramica

Se si utilizza Visual Studio per generare tipi di client Windows Communication Foundation (WCF) per il progetto, in genere non è necessario esaminare il codice client generato. Se non si utilizza un ambiente di sviluppo che esegue automaticamente gli stessi servizi, è possibile utilizzare uno strumento quale Svcutil.exe per generare codice client e utilizzare tale codice per sviluppare l'applicazione client.

Poiché Svcutil.exe dispone di alcune opzioni che modificano le informazioni sui tipi generati, in questo argomento non verranno esaminati tutti gli scenari. Tuttavia, nelle attività standard seguenti è coinvolta l'individuazione del codice generato:

  • Identificazione delle interfacce del contratto di servizio.
  • Identificazione della classe client WCF.
  • Identificazione dei tipi di dati.
  • Identificazione di contratti di callback per i servizi duplex.
  • Identificazione dell'interfaccia del contratto di servizio di assistenza.

Individuazione delle interfacce del contratto di servizio

Per individuare le interfacce che modellano i contratti di servizio, cercare le interfacce contrassegnate con l'attributo System.ServiceModel.ServiceContractAttribute. Spesso questo attributo può essere difficile da individuare con una lettura rapida a causa della presenza di altri attributi e di proprietà esplicite impostate sull'attributo stesso. Ricordare che l'interfaccia del contratto di servizio e l'interfaccia del contratto client sono due tipi diversi. Nell'esempio di codice seguente viene illustrato il contratto di servizio originale.

Nell'esempio di codice seguente viene illustrato lo stesso contratto di servizio generato da Svcutil.exe.

È possibile utilizzare l'interfaccia del contratto di servizio generata insieme alla classe System.ServiceModel.ChannelFactory per creare un oggetto del canale WCF con il quale richiamare operazioni del servizio. Per ulteriori informazioni, vedere Procedura: utilizzare ChannelFactory.

Ricerca della classi client WCF

Per identificare la classe client WCF che implementa il contratto di servizio da utilizzare, ricercare un'estensione di System.ServiceModel.ClientBase, in cui il parametro di tipo è l'interfaccia del contratto di servizio precedentemente individuata che estende l'interfaccia. Nell'esempio di codice seguente viene illustrata la classe ClientBase del tipo ISampleService.

È possibile utilizzare questa classe client WCF creandone una nuova istanza e chiamando i metodi che implementa. Tali metodi richiamano l'operazione del servizio con la quale è progettato e configurato per interagire. Per ulteriori informazioni, vedere Panoramica dei client WCF.

Nota

Quando SvcUtil.exe genera una classe client WCF, aggiunge DebuggerStepThroughAttribute alla classe client che impedisce ai debugger di eseguire la classe client WCF un'istruzione alla volta.

Ricerca dei tipi di dati

Per individuare i tipi di dati nel codice generato, il meccanismo più basilare consiste nell'identificare il nome del tipo specificato in un contratto e cercare tale dichiarazione del tipo nel codice. Ad esempio, il contratto seguente specifica che SampleMethod può restituire un errore SOAP di tipo microsoft.wcf.documentation.SampleFault.

Se si esegue una ricerca per SampleFault, viene individuata la dichiarazione di tipo seguente.

In questo caso il tipo di dati è il tipo di dettaglio generato da un'eccezione specifica sul client, una FaultException in cui il parametro di tipo del dettaglio è microsoft.wcf.documentation.SampleFault. Per ulteriori informazioni sui tipi di dati, vedere Specifica del trasferimento di dati nei contratti di servizio. Per ulteriori informazioni sulla gestione delle eccezioni nei client, vedere Invio e ricezione degli errori.

Individuazione dei contratti di callback per i servizi duplex

Se si individua un contratto di servizio per il quale l'interfaccia del contratto specifica un valore per la proprietà System.ServiceModel.ServiceContractAttribute.CallbackContract, quel contratto specifica un contratto duplex. I contratti duplex richiedono che l'applicazione client crei una classe di callback che implementa il contratto di callback e passa un'istanza di quella classe a un costruttore System.ServiceModel.DuplexClientBase o System.ServiceModel.DuplexChannelFactory utilizzato per comunicare con il servizio. Per ulteriori informazioni sui client duplex, vedere Procedura: accedere ai servizi con un contratto duplex.

Nel contratto seguente viene specificato un contratto di callback di tipo SampleDuplexHelloCallback.

Se si esegue una ricerca per tale contratto di callback, viene identificata l'interfaccia seguente che l'applicazione client deve implementare.

Individuazione delle interfacce del canale del contratto di servizio

Quando si utilizza la classe ChannelFactory con un'interfaccia del contratto del servizio, per aprire, chiudere o interrompere in modo esplicito il canale è necessario eseguire il cast all'interfaccia System.ServiceModel.IClientChannel. Per semplificare l'utilizzo, lo strumento Svcutil.exe genera inoltre un'interfaccia di supporto che implementa l'interfaccia del contratto del servizio e IClientChannel per consentire l'interazione con l'infrastruttura del canale client senza dovere eseguire il cast. Nel codice seguente viene illustrata la definizione di un canale client di supporto che implementa il contratto del servizio precedente.

Vedere anche

Concetti

Panoramica dei client WCF