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:
- Compilare il codice del servizio.
- 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