Condividi tramite


Procedura: definire un contratto di servizio di Windows Communication Foundation

Questa è la prima delle 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.

Quando si crea un servizio WCF di base, la prima attività consiste nel definire un contratto. Nel contratto vengono specificate le operazioni supportate dal servizio. Un'operazione può essere considerata un metodo del servizio Web. I contratti vengono creati definendo un'interfaccia C++, C# o Visual Basic (VB). Ogni metodo nell'interfaccia corrisponde a un'operazione del servizio specifica. A ogni interfaccia deve essere applicato l'oggetto ServiceContractAttribute e a ogni operazione deve essere applicato l'oggetto OperationContractAttribute. Se un metodo in un'interfaccia che dispone di ServiceContractAttribute non dispone di OperationContractAttribute, tale metodo non viene esposto.

Nell'esempio riportato dopo la procedura, viene fornito il codice utilizzato per questa attività.

Per creare un contratto Windows Communication Foundation con un'interfaccia

  1. Aprire Visual Studio 2010 come amministratore facendo clic con il pulsante destro del mouse sul programma nel menu Start e selezionando Esegui come amministratore.

  2. Creare un nuovo progetto di applicazione console. Scegliere Nuovo dal menu File, quindi Progetto. Nella finestra di dialogo Nuovo progetto selezionare Visual Basic o Visual C#, quindi scegliere il modello Applicazione console e assegnargli il nome Service. Utilizzare il Percorso predefinito.

  3. Per un progetto C# in Visual Studio viene creato un file chiamato Program.cs. Questa classe conterrà un metodo vuoto denominato Main(). Per un progetto VB in Visual Studio viene creato un file chiamato Module1.vb con una subroutine vuota denominata Main(). Questi metodi sono necessari per la corretta compilazione di un progetto di applicazione console, pertanto occorre lasciarli nel progetto.

  4. Modificare lo spazio dei nomi Service predefinito in Microsoft.ServiceModel.Samples. A tale scopo, in Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e selezionare Proprietà. Assicurarsi che la scheda Applicazione sul lato sinistro della finestra di dialogo Proprietà sia selezionata. Per un progetto C#, digitare Microsoft.ServiceModel.Samples nella casella di modifica Spazio dei nomi predefinito. Per un progetto VB, digitare Microsoft.ServiceModel.Samples nella casella di modifica Spazio dei nomi radice. Fare clic sul menu File e selezionare Salva tutti per salvare le modifiche.

  5. Se si utilizza C#, modificare in Microsoft.ServiceModel.Samples lo spazio dei nomi nel file Program.cs generato, come mostrato nell'esempio seguente.

    namespace Microsoft.ServiceModel.Samples 
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    

    Se si utilizza VB, aggiungere un'istruzione Namespace e un'istruzione End Namespace nel file Module1.vb generato, come mostrato nell'esempio seguente.

    Namespace Microsoft.ServiceModel.Samples
        Module Module1
            Sub Main()
            End Sub
        End Module
    End Namespace
    
  6. Aggiungere un riferimento a System.ServiceModel.dll al progetto:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Riferimenti nella cartella del progetto e scegliere Aggiungi riferimento.

    2. Selezionare la scheda .NET nella finestra di dialogo Aggiungi riferimento e scorrere verso il basso fino a visualizzare la voce System.ServiceModel (versione 4.0.0.0), selezionarla e fare clic su OK.

    ms731835.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".

  7. Aggiungere un'istruzione using (Imports in Visual Basic) per lo spazio dei nomi System.ServiceModel:

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  8. Definire una nuova interfaccia denominata ICalculator e applicare l'attributo ServiceContractAttribute all'interfaccia con un valore "http://Microsoft.ServiceModel.Samples" per Namespace. Una procedura consigliata è la specifica dello spazio dei nomi in modo esplicito perché impedisce che il valore dello spazio dei nomi predefinito venga aggiunto al nome del contratto.

    ms731835.note(it-it,VS.100).gifNota:
    Quando vengono utilizzati attributi per annotare un'interfaccia o una classe, è possibile eliminare la parte "Attribute" dal nome dell'attributo. In questo modo ServiceContractAttribute diventa [ServiceContract] in C# o <ServiceContract> in Visual Basic.

    <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
    Public Interface ICalculator
    
    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
    public interface ICalculator
    
  9. Dichiarare un metodo per ciascuna delle operazioni esposte dal contratto ICalculator (somma, sottrazione, moltiplicazione e divisione) all'interno dell'interfaccia e applicare l'attributo OperationContractAttribute a ogni metodo che si desidera esporre come parte del contratto WCF pubblico.

        <OperationContract()> _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
    

Esempio

Nell'esempio di codice seguente viene illustrata un'interfaccia di base che definisce un contratto di servizio.

Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples
    ' Step 6: 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
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
  // Step 6: Define a service contract.
  [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
  public interface ICalculator
  {
    // Step7: Create the method declaration for the contract.
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
  }
}

Una volta creata l'interfaccia, passare a Procedura: implementare un contratto di servizio di Windows Communication Foundation per implementarla. Per informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi relativi all'esercitazione introduttiva.

Vedere anche

Attività

Procedura: implementare un contratto di servizio di Windows Communication Foundation
Esempio della guida introduttiva
Servizio indipendente

Riferimento

ServiceContractAttribute
OperationContractAttribute