Jak utworzyć usługę RESTful w programie WCF

WCF (Windows Communication Foundation) to bezpieczna, niezawodna i skalowalna platforma do obsługi wiadomości, której można używać do tworzenia usług sieci Web w .Net. Zapewnia ujednolicony model programowania do tworzenia aplikacji zorientowanych na usługi.

Możesz użyć WCF do tworzenia usług RESTful w .NET. REST (Representational State Transfer) to paradygmat architektury zgodny z zasadami architektury REST Architektura REST opiera się na koncepcji zasobów: wykorzystuje zasoby do reprezentowania stanu i funkcjonalności aplikacji. Te zasoby są z kolei identyfikowane za pomocą identyfikatorów URI w protokole HTTP.

Tworzenie usługi WCF

W tej sekcji omówimy, jak możemy zbudować usługę RESTful w WCF. Po pierwsze, utwórzmy nową usługę WCF w programie Visual Studio. Aby to zrobić, wykonaj czynności opisane poniżej. Zwróć uwagę, że do zbudowania aplikacji zilustrowanej w tym artykule użyłem Visual Studio 2015, chociaż możesz również użyć Visual Studio 2012 lub 2013.

  1. Otwórz program Visual Studio 2015
  2. W menu Plik w środowisku IDE programu Visual Studio kliknij Start -> Plik -> Nowy -> Projekt
  3. Następnie wybierz WCF z listy wyświetlonych szablonów projektów
  4. Wybierz opcję „Aplikacja usługi WCF” w okienku po prawej stronie
  5. Określ nazwę projektu usługi WCF i kliknij przycisk OK, aby go zapisać

Spowoduje to utworzenie nowego projektu aplikacji usługi WCF o określonej nazwie. Projekt zawierałby również domyślną usługę wyłącznie w celach ilustracyjnych.

Implementowanie usługi WCF RESTful

Podczas pracy z programem WCF należy najpierw utworzyć kontrakt usługi, a następnie zdefiniować w nim operacje usługi lub kontrakty operacji. Zazwyczaj usługa WCF składa się z następujących elementów:

  1. Klasa usług
  2. Umowa o świadczenie usług
  3. Jedna lub więcej umów operacyjnych
  4. Co najmniej jeden punkt końcowy
  5. Środowisko hostingowe

ServiceContract służy do określania operacji, które są dostępne dla klienta usługi do wykorzystania. Poniższy fragment kodu pokazuje, jak wygląda umowa serwisowa - zmodyfikujemy to później, aby było zgodne ze stanem REST.

 [ServiceContract]

    public interface ICustomerService

    {

        [OperationContract]

        List GetCustomerList();

    }

DataContract służy do opisywania danych, które muszą być wymieniane między usługodawcą a usługobiorcą. Rozważmy następujący DataContract o nazwie 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; }

    }

Kontrakt operacji służy do ujawniania metody jako metody usługi, a także przepływu transakcji, kierunku operacji usługi, a także kontraktu błędu, który może być skojarzony. Poniższy fragment kodu ilustruje, jak można zadeklarować operację usługi przy użyciu atrybutu OperationContract i użyć atrybutu WebInvoke do określenia operacji HTTP, Uri, formatu wiadomości sieci Web itp.

[OperationContract]

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

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

List GetCustomerList();

Poniższy fragment kodu ilustruje, jak obsługa klienta może być zgodna z REST przez zastosowanie atrybutu WebInvoke w jej metodzie usługi.

public interface ICustomerService

    {

        [OperationContract]

        [WebInvoke(Method = "GET",

            ResponseFormat = WebMessageFormat.Json,

            BodyStyle = WebMessageBodyStyle.Wrapped,

            UriTemplate = "GetCustomers")]

        List GetCustomerList();

    }

Klasa CustomerService rozszerza kontrakt usługi ICustomerService i zapewnia implementację operacji usługi o nazwie GetCustomerList. Oto jak wyglądałaby klasa 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;

        }

    }

Należy zauważyć, że metoda PopulateCustomerData nie jest metodą usługową; jest to metoda prywatna, która zwraca listę rekordów klientów i jest wywoływana z metody usługi GetCustomerList.

Następną rzeczą, którą powinieneś zrobić, jest skonfigurowanie usługi WCF. Aby to zrobić, musisz określić szczegóły powiązania i punktu końcowego, a także zachowanie usługi. Poniższy fragment kodu pokazuje, jak powinna wyglądać konfiguracja usługi dla tej usługi.

   

     

       

       

     

   

   

     

       

         

         

       

     

     

       

         

       

     

   

   

 

I to wszystko, co musisz zrobić. Możesz teraz otworzyć przeglądarkę sieci Web i przetestować usługę WCF RESTful.