Come creare un servizio RESTful in WCF

WCF (Windows Communication Foundation) è una piattaforma di messaggistica sicura, affidabile e scalabile che può essere utilizzata per creare servizi Web in .Net. Fornisce un modello di programmazione unificato per lo sviluppo di applicazioni orientate ai servizi.

È possibile utilizzare WCF per creare servizi RESTful in .NET. REST (Representational State Transfer) è un paradigma di architettura conforme ai principi dell'architettura REST. L'architettura REST si basa sul concetto di risorse: utilizza le risorse per rappresentare lo stato e la funzionalità di un'applicazione. Queste risorse vengono a loro volta identificate utilizzando gli URI sul protocollo HTTP.

Creazione di un servizio WCF

In questa sezione esploreremo come creare un servizio RESTful in WCF. Prima di tutto, creiamo un nuovo servizio WCF in Visual Studio. A tale scopo, seguire i passaggi descritti di seguito. Tieni presente che per creare l'applicazione illustrata in questo articolo ho utilizzato Visual Studio 2015 sebbene tu possa utilizzare anche Visual Studio 2012 o 2013.

  1. Apri Visual Studio 2015
  2. Nel menu File nell'IDE di Visual Studio, fare clic su Start -> File -> Nuovo -> Progetto
  3. Quindi, seleziona WCF dall'elenco dei modelli di progetto visualizzati
  4. Selezionare "Applicazione di servizio WCF" nel riquadro a destra
  5. Specificare un nome per il progetto del servizio WCF e fare clic su OK per salvarlo

Ciò creerebbe un nuovo progetto dell'applicazione di servizio WCF nel nome specificato. Il progetto conterrebbe anche un servizio predefinito solo a scopo illustrativo.

Implementazione del servizio WCF RESTful

Quando si lavora con WCF, è prima necessario creare un contratto di servizio e quindi definire le operazioni di servizio oi contratti di operazione in esso. In genere, un servizio WCF comprende quanto segue:

  1. Classe di servizio
  2. Contratto di servizio
  3. Uno o più contratti di operazione
  4. Uno o più endpoint
  5. Ambiente di hosting

Un ServiceContract viene utilizzato per specificare le operazioni che sono disponibili per essere utilizzate dal client del servizio. Il seguente frammento di codice mostra l'aspetto di un contratto di servizio: lo modificheremo in seguito per renderlo RESTful.

 [ServiceContract]

    public interface ICustomerService

    {

        [OperationContract]

        List GetCustomerList();

    }

Un DataContract viene utilizzato per descrivere i dati che devono essere scambiati tra il fornitore del servizio e il consumatore del servizio. Considera il seguente DataContract chiamato Customer.

[DataContract(Namespace = "")]

public class Customer

    {

        [DataMember]

        public Int32 CustomerID { get; set; }

        [DataMember]

        public string FirstName { get; set; }

        [DataMember]

        public string LastName { get; set; }

        [DataMember]

        public String Address { get; set; }

    }

Un contratto di operazione viene utilizzato per esporre un metodo come metodo di servizio e anche il flusso di transazione, la direzione dell'operazione di servizio e anche i contratti di errore che possono essere associati. Il frammento di codice seguente illustra come dichiarare un'operazione di servizio utilizzando l'attributo OperationContract e utilizzare l'attributo WebInvoke per specificare l'operazione HTTP, Uri, il formato del messaggio Web e così via.

[OperationContract]

        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,

        BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetCustomers")]

List GetCustomerList();

Il seguente frammento di codice illustra come il servizio clienti può essere reso RESTful applicando l'attributo WebInvoke al suo metodo di servizio.

public interface ICustomerService

    {

        [OperationContract]

        [WebInvoke(Method = "GET",

            ResponseFormat = WebMessageFormat.Json,

            BodyStyle = WebMessageBodyStyle.Wrapped,

            UriTemplate = "GetCustomers")]

        List GetCustomerList();

    }

La classe CustomerService estende il contratto di servizio ICustomerService e fornisce l'implementazione dell'operazione di servizio denominata GetCustomerList. Ecco come apparirebbe la classe CustomerService.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class CustomerService : ICustomerService

    {     

        public List GetCustomerList()

        {

            return PopulateCustomerData();

        }

        private List PopulateCustomerData()

        {

            List lstCustomer = new List();

            Customer customer1 = new Customer();

            customer1.CustomerID = 1;

            customer1.FirstName = "John";

            customer1.LastName = "Meaney";

            customer1.Address = "Chicago";

            lstCustomer.Add(customer1);

            Customer customer2 = new Customer();

            customer2.CustomerID = 1;

            customer2.FirstName = "Peter";

            customer2.LastName = "Shaw";

            customer2.Address = "New York";

            lstCustomer.Add(customer2);

            return lstCustomer;

        }

    }

Notare che il metodo PopulateCustomerData non è un metodo di servizio; è un metodo privato che restituisce un elenco di record del cliente e viene chiamato dal metodo del servizio GetCustomerList.

La prossima cosa da fare è configurare il servizio WCF. A tale scopo, è necessario specificare i dettagli del binding e dell'endpoint e anche il comportamento del servizio. Il seguente frammento di codice mostra come dovrebbe apparire la configurazione del servizio per questo servizio.

   

     

       

       

     

   

   

     

       

         

         

       

     

     

       

         

       

     

   

   

 

E questo è tutto quello che devi fare. È ora possibile aprire un browser Web e testare il servizio RESTful WCF.