So erstellen Sie einen RESTful-Service in WCF

WCF (Windows Communication Foundation) ist eine sichere, zuverlässige und skalierbare Messaging-Plattform, mit der Webdienste in .Net erstellt werden können. Es bietet ein einheitliches Programmiermodell für die Entwicklung serviceorientierter Anwendungen.

Mit WCF können Sie RESTful-Services in .NET erstellen. REST (Representational State Transfer) ist ein Architekturparadigma, das den REST-Architekturprinzipien entspricht. Die REST-Architektur basiert auf dem Konzept der Ressourcen: Sie verwendet Ressourcen, um den Status und die Funktionalität einer Anwendung darzustellen. Diese Ressourcen werden wiederum mithilfe von URIs über das HTTP-Protokoll identifiziert.

Erstellen eines WCF-Dienstes

In diesem Abschnitt werden wir untersuchen, wie wir einen RESTful-Service in WCF erstellen können. Lassen Sie uns zunächst einen neuen WCF-Dienst in Visual Studio erstellen. Befolgen Sie dazu die unten beschriebenen Schritte. Beachten Sie, dass ich zum Erstellen der in diesem Artikel dargestellten Anwendung Visual Studio 2015 verwendet habe, obwohl Sie auch Visual Studio 2012 oder 2013 verwenden können.

  1. Öffnen Sie Visual Studio 2015
  2. Klicken Sie im Menü Datei in der Visual Studio-IDE auf Start -> Datei -> Neu -> Projekt
  3. Wählen Sie als Nächstes WCF aus der Liste der angezeigten Projektvorlagen aus
  4. Wählen Sie im rechten Bereich "WCF-Dienstanwendung" aus
  5. Geben Sie einen Namen für Ihr WCF-Serviceprojekt an und klicken Sie auf OK, um es zu speichern

Dadurch wird ein neues WCF-Dienstanwendungsprojekt unter dem von Ihnen angegebenen Namen erstellt. Das Projekt würde auch einen Standarddienst nur zu Illustrationszwecken enthalten.

Implementierung des RESTful WCF-Dienstes

Wenn Sie mit WCF arbeiten, müssen Sie zuerst einen Servicevertrag erstellen und dann die darin enthaltenen Servicevorgänge oder Betriebsverträge definieren. Typischerweise umfasst ein WCF-Dienst Folgendes:

  1. Serviceklasse
  2. Servicevertrag
  3. Ein oder mehrere Betriebsverträge
  4. Ein oder mehrere Endpunkte
  5. Hosting-Umgebung

Ein ServiceContract wird verwendet, um die Vorgänge anzugeben, die dem Service-Client zur Verfügung stehen. Das folgende Codefragment zeigt, wie ein Servicevertrag aussieht. Wir werden ihn später ändern, um ihn RESTful zu machen.

 [ServiceContract]

    public interface ICustomerService

    {

        [OperationContract]

        List GetCustomerList();

    }

Ein DataContract wird verwendet, um die Daten zu beschreiben, die zwischen dem Dienstanbieter und dem Dienstkonsumenten ausgetauscht werden müssen. Betrachten Sie den folgenden DataContract mit dem Namen 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; }

    }

Ein Betriebsvertrag wird verwendet, um eine Methode als Servicemethode sowie den Transaktionsfluss, die Richtung des Servicevorgangs und auch die möglicherweise zugeordneten Fehlerverträge verfügbar zu machen. Das folgende Codeausschnitt zeigt, wie Sie eine Dienstoperation mithilfe des OperationContract-Attributs deklarieren und mithilfe des WebInvoke-Attributs die HTTP-Operation, den Uri, das Webnachrichtenformat usw. angeben können.

[OperationContract]

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

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

List GetCustomerList();

Das folgende Codeausschnitt zeigt, wie der Kundendienst durch Anwenden des WebInvoke-Attributs auf seine Dienstmethode REST-fähig gemacht werden kann.

public interface ICustomerService

    {

        [OperationContract]

        [WebInvoke(Method = "GET",

            ResponseFormat = WebMessageFormat.Json,

            BodyStyle = WebMessageBodyStyle.Wrapped,

            UriTemplate = "GetCustomers")]

        List GetCustomerList();

    }

Die CustomerService-Klasse erweitert den ICustomerService-Servicevertrag und stellt die Implementierung des Servicevorgangs GetCustomerList bereit. So würde die CustomerService-Klasse aussehen.

[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;

        }

    }

Beachten Sie, dass die PopulateCustomerData-Methode keine Servicemethode ist. Es ist eine private Methode, die eine Liste von Kundendatensätzen zurückgibt und von der GetCustomerList-Dienstmethode aufgerufen wird.

Als nächstes sollten Sie den WCF-Dienst konfigurieren. Dazu müssten Sie die Bindungs- und Endpunktdetails sowie das Dienstverhalten angeben. Das folgende Codefragment zeigt, wie die Dienstkonfiguration für diesen Dienst aussehen sollte.

   

     

       

       

     

   

   

     

       

         

         

       

     

     

       

         

       

     

   

   

 

Und das ist alles was Sie tun müssen. Sie können jetzt einen Webbrowser öffnen und Ihren WCF RESTful-Dienst testen.