Esporta (0) Stampa
Espandi tutto

Passaggio 2: Definire un contratto del servizio WCF basato su REST per l'uso con Service Bus

Aggiornamento: giugno 2014

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

Come per altri servizi di Service Bus, quando si crea un servizio basato su REST, è necessario definire il contratto. Nel contratto sono specificate 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'attributo ServiceContractAttribute e a ogni operazione l'attributo OperationContractAttribute. Se un metodo in un'interfaccia con l'attributo ServiceContractAttribute non dispone dell'attributo OperationContractAttribute, tale metodo non viene esposto. Il codice usato per eseguire queste attività viene fornito nell'esempio dopo la procedura.

La differenza principale tra un contratto di base di Service Bus e un contratto di tipo REST consiste nella presenza di una proprietà aggiuntiva in OperationContractAttribute: WebGetAttribute. Questa proprietà consente di mappare 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 a Service Bus 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 selezionare Visual C# (se Visual C# non viene visualizzato, 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#, in Visual Studio verrà creato un file denominato Program.cs. Si tratta di una classe contenente un metodo vuoto denominato Main(). Tale metodo è necessario per la corretta compilazione di un progetto di applicazione console ed è quindi opportuno lasciarlo all'interno del progetto.

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

    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 quindi clic su OK,

    noteNota
    Quando si usa un compilatore da riga di comando, ad esempio Csc.exe, è necessario specificare anche il percorso degli assembly. Ad esempio, in un computer che esegue , il percorso predefinito è Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation.

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

  6. Aggiungere un'istruzione using per gli spazi dei nomi 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). In Service Bus vengono usati molti degli oggetti e degli attributi di Windows Communication Foundation (WCF) per definire contratti del servizio. Questo spazio dei nomi viene usato nella maggior parte delle applicazioni di Service Bus. In modo analogo, System.ServiceModel.Channels consente di definire il canale, ossia l'oggetto usato per comunicare con Service Bus 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 di default 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 applicarvi l'attributo ServiceContractAttribute con il 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 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 che si desidera esporre come parte del contratto pubblico di Service Bus.

    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 a Service Bus 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 da Service Bus per passare le richieste HTTP GET dal browser all'implementazione di GetImage e 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

Il seguente esempio di codice illustra un'interfaccia di base che definisce un contratto di Service Bus.

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 del servizio WCF basato su REST per l'utilizzo di Service Bus per implementarla.

Vedere anche

Mostra:
© 2014 Microsoft