Condividi tramite


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.

ms733133.note(it-it,VS.100).gifNota:
È 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).

ms733133.Warning(it-it,VS.100).gif 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

  1. Creare un nuovo progetto nella soluzione corrente per il client in Visual Studio 2010 eseguendo la procedura seguente:

    1. 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.

    2. 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.

    3. Scegliere OK.

  2. Aggiungere un riferimento a System.ServiceModel.dll per il progetto:

    1. Fare clic con il pulsante destro del mouse sulla cartella Riferimenti del progetto Client in Esplora soluzioni e scegliere Aggiungi riferimento.

    2. Selezionare la scheda .NET e selezionare System.ServiceModel.dll (version 4.0.0.0) dalla casella di riepilogo, quindi fare clic su OK.

    ms733133.note(it-it,VS.100).gifNota:
    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.

  3. 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;
    
  4. 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.

  5. 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:

    1. 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.

    2. 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.

    3. 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.

  6. 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

Concetti

Strumento ServiceModel Metadata Utility Tool (Svcutil.exe)