Esporta (0) Stampa
Espandi tutto

Passaggio 2: Definire un contratto di servizio WCF basato su REST da usare con il bus di servizio

Aggiornamento: marzo 2015

Questa è la seconda di quattro attività necessarie per creare un servizio di tipo REST di base per il Bus di servizio. Per una panoramica delle quattro attività, vedere Esercitazione REST sul bus di servizio.

Come per altri servizi del Bus di servizio, quando si crea un servizio basato su REST, è necessario definire il contratto. Il contratto specifica le operazioni supportate dall'host. È possibile considerare un'operazione del servizio come un metodo di servizio Web. I contratti vengono creati tramite la definizione di un'interfaccia C++, C# o Visual Basic. Ogni metodo nell'interfaccia corrisponde a una specifica operazione del servizio. A ogni interfaccia deve essere applicato l'attributoServiceContractAttribute e a ogni operazione l'attributo OperationContractAttribute. Se un metodo in un'interfaccia con l'attributo ServiceContractAttribute non ha l'attributo OperationContractAttribute, questo metodo non verrà esposto. Il codice usato per queste attività è illustrato nell'esempio successivo alla procedura.

La differenza principale tra un contratto di base del Bus di servizio e un contratto di tipo REST consiste nella presenza di una proprietà aggiuntiva in OperationContractAttribute: WebGetAttribute. Questa proprietà consente di eseguire il mapping di un metodo nell'interfaccia a un metodo sull'altro lato dell'interfaccia In questo caso, si userà WebGetAttribute per collegare un metodo a HTTP GET. Questo consente al Bus di servizio di recuperare e interpretare con precisione i comandi inviati all'interfaccia.

Tempo previsto per il completamento: 10 minuti.

  1. Aprire Visual Studio come amministratore. A questo scopo, fare clic con il pulsante destro del mouse sul programma nel menu Start, quindi scegliere Esegui come amministratore.

  2. Creare un nuovo progetto di applicazione console. Scegliere Nuovo dal menu File, quindi Progetto. Nella finestra di dialogo Nuovo progetto fare clic su Visual C# (se Visual C# non è disponibile, cercare in Altri linguaggi), selezionare il modello Applicazione console e specificare il nome ImageListener. Usare il valore predefinito nel campo Percorso. Fare clic su OK per creare il progetto.

  3. Per un progetto C#, Visual Studio crea un file denominato Program.cs. Si tratta di una classe contenente un metodo vuoto denominato Main(). Questo metodo è necessario per la corretta compilazione di un progetto di applicazione console, ed è quindi opportuno lasciarlo all'interno del progetto.

  4. Aggiungere al progetto un riferimento a System.ServiceModel.dll:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti nella cartella dei progetti, quindi scegliere Aggiungi riferimento.

    2. Fare clic sulla scheda .NET nella finestra di dialogo Aggiungi riferimento, scorrere verso il basso fino a visualizzare System.ServiceModel e selezionarlo. Fare clic su OK.

    noteNota
    Quando si usa un compilatore da riga di comando, ad esempio, Csc.exe, è necessario specificare anche il percorso degli assembly. Per impostazione predefinita, in un computer in cui è in esecuzione ad esempio , il percorso è: Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation.

  5. Ripetere il passaggio precedente per aggiungere un riferimento all'assemblySystem.ServiceModel.Web.dll.

  6. Aggiungere un'istruzione using per gli spazi dei nomithe System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Web e System.IO.

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Web;
    using System.IO;
    
    

    System.ServiceModel è lo spazio dei nomi che consente di accedere a livello di codice alle funzionalità di base di Windows Communication Foundation (WCF). Il Bus di servizio usa molti degli oggetti e degli attributi di WCF per definire contratti di servizio. Questo spazio dei nomi viene usato nella maggior parte delle applicazioni del Bus di servizio. In modo analogo, System.ServiceModel.Channels consente di definire il canale, ossia l'oggetto usato per comunicare con il Bus di servizio e il Web browser client. Infine, System.ServiceModel.Web contiene i tipi che consentono di creare applicazioni basate sul Web.

  7. Rinominare lo spazio dei nomi per il programma sostituendo il nome predefinito di Visual Studio con Microsoft.ServiceBus.Samples.

    namespace Microsoft.ServiceBus.Samples
    {
    ...
    
    
  8. Immediatamente dopo la dichiarazione dello spazio dei nomi, definire una nuova interfaccia denominata IImageContract e applicare l'attributo ServiceContractAttribute all'interfaccia con un valore http://samples.microsoft.com/ServiceModel/Relay/. Il valore dello spazio dei nomi è diverso dallo spazio dei nomi usato nell'ambito del codice. Tale valore viene usato come identificatore univoco per il contratto e deve includere informazioni di controllo delle versioni. Per altre informazioni, vedere, vedere Controllo delle versioni del servizio. Specificando lo spazio dei nomi esplicitamente, si evita che al nome del contratto venga aggiunto il valore dello spazio dei nomi predefinito.

    [ServiceContract(Name = "ImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1")]
    public interface IImageContract
    {
    }
    
    
  9. Nell'interfaccia IImageContract dichiarare un metodo per l'unica operazione esposta dal contratto IImageContract nell'interfaccia e applicare l'attributo OperationContractAttribute al metodo da esporre come parte del contratto pubblico del Bus di servizio.

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  10. Accanto all'attributo OperationContract applicare l'attributo WebGet.

    
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    

    Questa impostazione consente al Bus di servizio di instradare richieste HTTP GET a GetImage, e di convertire i valori restituiti da GetImage in una risposta HTTP GETRESPONSE. Più avanti nell'esercitazione si userà un Web browser per accedere a questo metodo e visualizzare l'immagine nel browser.

  11. Immediatamente sotto la definizione di IImageContract dichiarare un canale in grado di ereditare da entrambe le interfacce IImageContract e IClientChannel:

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    
    public interface IImageChannel : IImageContract, IClientChannel { }
    

    Per canale si intende l'oggetto WCF tramite il quale il servizio e il client si scambiano le informazioni. Più avanti si creerà il canale nell'applicazione host. Questo canale viene usato dal Bus di servizio per passare le richieste HTTP GET dal browser all'implementazione di GetImage. Bus di servizio usa il canale anche per acquisire il valore restituito da GetImage e convertirlo in una risposta HTTP GETRESPONSE per il browser client.

  12. Scegliere Compila soluzione dal menu Compila per verificare la correttezza del lavoro.

Esempio

L'esempio di codice seguente illustra un'interfaccia di base che definisce un contratto del Bus di servizio.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Web;
using System.IO;

namespace Microsoft.ServiceBus.Samples
{

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }

    public interface IImageChannel : IImageContract, IClientChannel { }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Ora che è stata creata l'interfaccia, procedere con il Passaggio 3: Implementare un contratto di servizio WCF basato su REST-per l'uso del bus di servizio per implementarla.

Vedere anche

Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft