Accesso ai servizi tramite client WCF

Dopo aver creato un servizio, il passaggio successivo consiste nel creare un client WCF. Un'applicazione client utilizza il client WCF per comunicare con il servizio. Le applicazioni client importano di norma i metadati di un servizio per generare il codice client WCF che può essere utilizzato per richiamare il servizio.

I passaggi di base per la creazione di un client WCF includono i seguenti:

  1. Compilare il codice del servizio.
  2. Utilizzare lo strumento ServiceModel Metadata Utility Tool (SvcUtil.exe) per creare il client WCF.

Strumento ServiceModel Metadata Utility Tool

ServiceModel Metadata Utility Tool (Svcutil.exe) è uno strumento da riga di comando per la generazione di codice da metadati. Di seguito è riportato un esempio di utilizzo di un comando Svcutil.exe di base.

Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address> 

In alternativa, è possibile utilizzare Svcutil.exe con file WSDL (Web Services Description Language) e XSD (XML Schema Definition) sul file system.

Svcutil.exe <list of WSDL and XSD files on file system>

Il risultato è un file di codice che contiene il codice client WCF che l'applicazione client può utilizzare per richiamare il servizio.

È inoltre possibile utilizzare lo strumento per generare file di configurazione.

Svcutil.exe <file1 [,file2]>

Se viene fornito un solo nome file, si tratta del nome del file di output. Se vengono forniti due nomi file, il primo indica un file di configurazione di input il cui il contenuto viene unito con la configurazione generata e scritto nel secondo file. Per ulteriori informazioni sulla configurazione, vedere Configurazione di associazioni per i servizi Windows Communication Foundation.

Nota

Le richieste di metadati non protette generano rischi esattamente come qualsiasi richiesta di rete non protetta. Se non si è certi dell'identità dell'endpoint con cui si sta comunicando, le informazioni recuperate potrebbero essere metadati provenienti da un servizio dannoso.

Esempio

Nell'esempio di codice seguente viene illustrato un contratto di servizio creato per un servizio.

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
    <OperationContract()>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double 
    ' Other methods are not shown here.
End Interface 

Lo strumento ServiceModel Metadata Utility Tool genera la classe di client WCF client seguente. La classe eredita dalla classe generica ClientBase e implementa l'interfaccia ICalculator. Lo strumento genera anche l'interfaccia ICalculator (procedure non illustrata di seguito).

public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    public CalculatorClient(){}
    
    public CalculatorClient(string configurationName) : 
            base(configurationName)
    {}
    
    public CalculatorClient(System.ServiceModel.Binding binding) : 
            base(binding)
    {}
    
    public CalculatorClient(System.ServiceModel.EndpointAddress address,
    System.ServiceModel.Binding binding) : 
            base(address, binding)
    {}
    
    public double Add(double n1, double n2)
    {
        return base.InnerChannel.Add(n1, n2);
    }
}
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal configurationName As String)
        MyBase.New(configurationName)
    End Sub
    
    Public Sub New(ByVal binding As System.ServiceModel.Binding)
        MyBase.New(binding)
    End Sub
    
    Public Sub New(ByVal address As _
    System.ServiceModel.EndpointAddress, _
    ByVal binding As System.ServiceModel.Binding)
        MyBase.New(address, binding)
    End Sub
    
    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As _
    Double Implements ICalculator.Add
        Return MyBase.InnerChannel.Add(n1, n2)
    End Function 
End Class

Utilizzo del client WCF

Per utilizzare il client WCF, creare un'istanza del client WCF e quindi chiamarne i metodi, come illustrato nel codice seguente.

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")

' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

Debug delle eccezioni generate da un client

Molte eccezioni generate da un client WCF vengono provocate da un'eccezione nel servizio. Di seguito ne vengono riportati alcuni esempi:

  • SocketException: connessione esistente chiusa forzatamente dall'host remoto.
  • CommunicationException: connessione sottostante chiusa in modo imprevisto.
  • CommunicationObjectAbortedException: connessione socket interrotta. Questo problema può essere causato da un errore durante l'elaborazione del messaggio, da un timeout di ricezione superato dall'host remoto o da un problema della risorsa di rete sottostante.

Quando si verificano questi tipi di eccezioni, il modo migliore per risolvere il problema è attivare la traccia sul lato servizio e individuare l'eccezione che si è verificata. sulle tracce, vedere Traccia e Utilizzo delle tracce per risolvere i problemi di un'applicazione.

Vedere anche

Attività

Procedura: creare un client di Windows Communication Foundation
Procedura: accedere ai servizi con un contratto duplex
Procedura: chiamare operazioni del servizio WCF in modo asincrono
Procedura: accedere a servizi WCF con un contratto unidirezionale o request/reply
Procedura: accedere a WSE 3.0 Service con un client WCF
Procedura: migliorare il tempo di avvio di applicazioni client WCF utilizzando XmlSerializer

Concetti

Informazioni sul codice client generato
Specifica del comportamento in fase di esecuzione dei client
Configurazione dei comportamenti client