Procedura: creare un client di Windows Communication Foundation
Si tratta della quarta di sei attività necessarie per creare un servizio Windows Communication Foundation (WCF) di base e un client in grado di chiamare il servizio. Per una panoramica di tutte e sei le attività, vedere l'argomento Esercitazione introduttiva.
In questo argomento viene illustrato come recuperare metadati da un servizio WCF e utilizzarli per creare un proxy WCF in grado di accedere al servizio. Questa attività viene completata utilizzando lo strumento Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) fornito da WCF. Questo strumento ottiene i metadati dal servizio e genera un file di codice sorgente gestito per un proxy nel linguaggio scelto. Oltre a creare il proxy client, lo strumento crea anche il file di configurazione per il client che consente all'applicazione client di connettersi al servizio su uno dei relativi endpoint.
Nota: |
---|
È possibile aggiungere un riferimento al servizio nel progetto client all'interno di Visual Studio 2010 per creare il proxy client anziché utilizzare Strumento ServiceModel Metadata Utility Tool (Svcutil.exe). |
Attenzione: |
---|
Quando si esegue la chiamata a un servizio WCF da un progetto Libreria di classi in Visual Studio 2010, è possibile utilizzare la funzionalità Aggiungi riferimento al servizio per generare automaticamente un proxy e un file di configurazione associato. Il file di configurazione non sarà utilizzato dal progetto Libreria di classi. Sarà necessario copiare il file di configurazione nella directory che contiene il file eseguibile che chiamerà la libreria di classi. |
L'applicazione client utilizza il proxy generato per creare un oggetto client WCF. Questa procedura viene descritta in Procedura: utilizzare un client di Windows Communication Foundation.
Il codice per il client generato da questa attività viene fornito nell'esempio riportato dopo la procedura.
Per creare un client Windows Communication Foundation
Creare un nuovo progetto nella soluzione corrente per il client in Visual Studio 2010 eseguendo la procedura seguente:
In Esplora soluzioni, nell'angolo superiore destro all'interno della stessa soluzione che contiene il servizio, fare clic con il pulsante destro del mouse sulla soluzione corrente (non sul progetto), quindi selezionare Aggiungi e Nuovo progetto.
Nella finestra di dialogo Aggiungi nuovo progetto selezionare Visual Basic o Visual C#, quindi scegliere il modello Applicazione console e assegnargli il nome Client. Utilizzare il Percorso predefinito.
Scegliere OK.
Aggiungere un riferimento a System.ServiceModel.dll per il progetto:
Fare clic con il pulsante destro del mouse sulla cartella Riferimenti del progetto Client in Esplora soluzioni e scegliere Aggiungi riferimento.
Selezionare la scheda .NET e selezionare System.ServiceModel.dll (version 4.0.0.0) dalla casella di riepilogo, quindi fare clic su OK.
Nota: Quando si utilizza un compilatore da riga di comando (ad esempio, Csc.exe o Vbc.exe), è necessario specificare anche il percorso agli assembly. Per impostazione predefinita, in un computer che esegue ad esempio Windows Vista, il percorso è : Windows\Microsoft.NET\Framework\v4.0. Aggiungere un'istruzione
using
(Imports
in Visual Basic) per lo spazio dei nomi System.ServiceModel nel file Program.cs o Program.vb generato.Imports System.ServiceModel
using System.ServiceModel;
In Visual Studio premere F5 per avviare il servizio creato nell'argomento precedente. Per ulteriori informazioni, vedere Procedura: ospitare ed eseguire un servizio Windows Communication Foundation di base.
Eseguire lo strumento Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) con le opzioni appropriate per creare il codice client e un file di configurazione eseguendo la procedura seguente:
Scegliere Tutti i programmi dal menu Start, quindi fare clic su Visual Studio 2010. Fare clic su Strumenti di Visual Studio, quindi fare clic su Prompt dei comandi di Visual Studio 2010.
Passare alla directory in cui si desidera posizionare il codice client. Se il progetto client è stato creato utilizzando le impostazioni predefinite, la directory è C:\Users\<nome utente>\Documenti\Visual Studio 10\Projects\Service\Client.
Utilizzare lo strumento da riga di comando Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) con le opzioni appropriate per creare il codice client. Nell'esempio seguente viene illustrato un file di codice e un file di configurazione per il servizio.
svcutil.exe /language:vb /out:generatedProxy.vb /config:app.config https://localhost:8000/ServiceModelSamples/service
svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config https://localhost:8000/ServiceModelSamples/service
Per impostazione predefinita, il codice del proxy client viene generato in un file denominato dopo il servizio (in questo caso, ad esempio, CalculatorService.cs o CalculatorService.vb dove l'estensione è appropriata al linguaggio di programmazione: .vb per Visual Basic o .cs per C#). L'opzione /out consente di modificare il nome del file proxy client in GeneratedProxy.cs. L'opzione /config consente di modificare il nome del file di configurazione client da Output.config (predefinito) ad App.config. Si noti che entrambi questi file vengono generati nella directory C:\Users\<nome utente>\Documenti\Visual Studio 10\Projects\Service\Client.
Aggiungere il proxy generato al progetto client in Visual Studio, fare clic con il pulsante destro del mouse sul progetto client in Esplora soluzioni, quindi selezionare Aggiungi ed Elemento esistente. Selezionare il file generatedProxy generato nel passaggio precedente.
Esempio
In questo esempio viene illustrato il codice client generato dallo strumento Strumento ServiceModel Metadata Utility Tool (Svcutil.exe).
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.1366
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict Off
Option Explicit On
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0"), _
System.ServiceModel.ServiceContractAttribute([Namespace]:="http://Microsoft.ServiceModel.Samples", ConfigurationName:="ICalculator")> _
Public Interface ICalculator
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")> _
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")> _
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")> _
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
Public Interface ICalculatorChannel
Inherits ICalculator, System.ServiceModel.IClientChannel
End Interface
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
Partial Public Class CalculatorClient
Inherits System.ServiceModel.ClientBase(Of ICalculator)
Implements ICalculator
Public Sub New()
MyBase.New
End Sub
Public Sub New(ByVal endpointConfigurationName As String)
MyBase.New(endpointConfigurationName)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(binding, remoteAddress)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return MyBase.Channel.Add(n1, n2)
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return MyBase.Channel.Subtract(n1, n2)
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return MyBase.Channel.Multiply(n1, n2)
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return MyBase.Channel.Divide(n1, n2)
End Function
End Class
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1366
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://Microsoft.ServiceModel.Samples", ConfigurationName="ICalculator")]
public interface ICalculator
{
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
double Add(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
double Subtract(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
double Multiply(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
double Divide(double n1, double n2);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ICalculatorChannel : ICalculator, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{
}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public CalculatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public CalculatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
public double Add(double n1, double n2)
{
return base.Channel.Add(n1, n2);
}
public double Subtract(double n1, double n2)
{
return base.Channel.Subtract(n1, n2);
}
public double Multiply(double n1, double n2)
{
return base.Channel.Multiply(n1, n2);
}
public double Divide(double n1, double n2)
{
return base.Channel.Divide(n1, n2);
}
}
È stato creato un client Windows Communication Foundation (WCF). Passare all'argomento Procedura: configurare un client Windows Communication Foundation di base per configurare il client. Per informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi relativi all'esercitazione introduttiva.
Vedere anche
Attività
Esempio della guida introduttiva
Servizio indipendente
Procedura: pubblicare metadati per un servizio utilizzando un file di configurazione
Procedura: utilizzare Svcutil.exe per scaricare documenti di metadati