(0) exportieren Drucken
Alle erweitern

Schritt 2:Definieren eines REST-basierten WCF-Dienstvertrags für die Verwendung mit Service Bus

Letzte Aktualisierung: Juni 2014

Dies ist die zweite von vier Aufgaben, die zum Erstellen eines Basisdiensts im REST-Stil für Servicebus erforderlich sind.Eine Übersicht über alle vier Aufgaben finden Sie im REST-Lernprogramm zu Service Bus.

Wie bei den anderen Servicebusdiensten müssen Sie beim Erstellen eines Diensts im REST-Stil den Vertrag definieren.Der Vertrag legt fest, welche Vorgänge der Host unterstützt.Ein Dienstvorgang kann als eine Webdienstmethode betrachtet werden.Verträge werden erstellt, indem eine C++-, C#- oder Visual Basic-Schnittstelle definiert wird.Jede Methode in der Schnittstelle entspricht einem bestimmten Dienstvorgang.Auf jede Schnittstelle muss das Attribut ServiceContractAttribute und auf jeden Vorgang das Attribut OperationContractAttribute angewendet werden.Wenn eine Methode in einer Schnittstelle das Attribut ServiceContractAttribute, nicht jedoch das Attribut OperationContractAttribute besitzt, wird diese Methode nicht bereitgestellt.Der für diese Aufgaben verwendete Code wird im auf das Verfahren folgende Beispiel gezeigt.

Der Hauptunterschied zwischen einem Servicebus-Basisvertrag und einem Vertrag im REST-Stil besteht darin, dass dem OperationContractAttribute eine Eigenschaft hinzugefügt wird:WebGetAttribute. Mithilfe dieser Methode können Sie eine Methode in Ihrer Schnittstelle einer Methode auf der anderen Seite der Schnittstelle zuordnen.In diesem Fall wird WebGetAttribute verwendet, um eine Methode mit einer HTTP GET-Anforderung zu verknüpfen.Auf diese Weise kann Servicebus Befehle genau abrufen und interpretieren, die an die Schnittstelle gesendet werden.

Geschätzte Zeit bis zum Abschließen des Vorgangs:10 Minuten.

  1. Öffnen Sie Visual Studio als Administrator, indem Sie mit der rechten Maustaste im Menü Start auf das Programm klicken und dann Als Administrator ausführen auswählen.

  2. Erstellen Sie ein neues Konsolenanwendungsprojekt.Klicken Sie im Menü Datei, und wählen Sie dann Neu und Projekt aus.Wählen Sie im Dialogfeld Neues Projekt die Option Visual C# aus (wenn Visual C# nicht angezeigt wird, suchen Sie unter Andere Sprachen), wählen Sie die Vorlage Konsolenanwendung aus, und geben Sie ihr den Namen ImageListener.Verwenden Sie den Standardspeicherort.Klicken Sie auf OK, um das Projekt zu erstellen.

  3. Für ein C#-Projekt erstellt Visual Studio eine Datei namens Program.cs.Diese Klasse enthält eine leere Methode namens Main(). Diese Methode ist erforderlich, damit ein Konsolenanwendungsprojekt ordnungsgemäß erstellt wird.Sie kann daher problemlos im Projekt verbleiben.

  4. Fügen Sie dem Projekt einen Verweis auf System.ServiceModel.dll hinzu:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste unter dem Projektordner auf den Ordner Verweise, und klicken Sie dann auf Verweis hinzufügen.

    2. Wählen Sie die Registerkarte .NET im Dialogfeld Verweis hinzufügen aus, und führen Sie dann einen Bildlauf nach unten durch, bis System.ServiceModel angezeigt wird. Wählen Sie diesen Eintrag aus.Klicken Sie dann auf OK.

    noteHinweis
    Wenn Sie einen Befehlszeilencompiler (z. B. Csc.exe) verwenden, müssen Sie außerdem den Pfad der Assemblys zur Verfügung stellen.Dieser Pfad lautet z. B. auf einem Computer, der ausführt, standardmäßig wie folgt:Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation.

  5. Wiederholen Sie den vorherigen Schritt, um der Assembly System.ServiceModel.Web.dll einen Verweis hinzuzufügen.

  6. Fügen Sie eine using-Anweisung für die Namespaces System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Web und System.IO hinzu.

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

    System.ServiceModel ist der Namespace, mit dem Sie programmgesteuert auf die grundlegenden Features von Windows Communication Foundation (WCF) zugreifen können. Servicebus verwendet viele Objekte und Attribute von WCF, um Dienstverträge zu definieren.Sie verwenden diesen Namespace in den meisten Ihrer Servicebus-Anwendungen.Auf ähnliche Weise unterstützt System.ServiceModel.Channels das Definieren des Kanals, also des Objekts, durch das die Kommunikation mit Servicebus und dem Clientwebbrowser erfolgt.Schließlich enthält System.ServiceModel.Web die Typen, mit denen Sie webbasierte Anwendungen erstellen können.

  7. Benennen Sie den Namespace für das Programm aus der Standardeinstellung Visual Studio in Microsoft.ServiceBus.Samples um.

    namespace Microsoft.ServiceBus.Samples
    {
    ...
    
    
  8. Definieren Sie direkt hinter der Deklaration des Namespaces eine neue Schnittstelle namens IImageContract, und wenden Sie das Attribut ServiceContractAttribute auf die Schnittstelle mit dem Namespacewert http://samples.microsoft.com/ServiceModel/Relay/ an.Der Namespacewert unterscheidet sich von dem Namespace, den Sie im Bereich Ihres Codes verwenden.Der Namespacewert wird als eindeutiger Bezeichner für diesen Vertrag verwendet und sollte Versionsinformationen enthalten.Weitere Informationen finden Sie unter finden Sie unter Dienstversionsverwaltung.Durch das explizite Angeben des Namespaces wird verhindert, dass der Namespacestandardwert dem Vertragsnamen hinzugefügt wird.

    [ServiceContract(Name = "ImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1")]
    public interface IImageContract
    {
    }
    
    
  9. Deklarieren Sie in der Schnittstelle IImageContract eine Methode für den einzelnen Vorgang, den der Vertrag IImageContract in der Schnittstelle bereitstellt, und wenden Sie das Attribut OperationContractAttribute auf die Methode an, die Sie als Teil des öffentlichen Servicebus-Vertrags bereitstellen möchten.

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  10. Wenden Sie neben dem Attribut OperationContract das Attribut WebGet an.

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

    Auf diese Weise kann Servicebus HTTP GET-Anforderungen an GetImage weiterleiten und die Rückgabewerte von GetImage in eine HTTP GETRESPONSE-Antwort übersetzen.Später in diesem Lernprogramm verwenden Sie einen Webbrowser, um auf diese Methode zuzugreifen und das Bild im Browser anzuzeigen.

  11. Deklarieren Sie direkt unter der Definition IImageContract einen Kanal, der von den Schnittstellen IImageContract und IClientChannel erbt:

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

    Ein Kanal ist das WCF-Objekt, über das der Dienst und der Client Informationen aneinander übergeben.Später erstellen Sie den Kanal in Ihrer Hostanwendung. Servicebus verwendet dann diesen Kanal, um die HTTP GET-Anforderungen vom Browser an Ihre GetImage-Implementierung zu übergeben. Servicebus verwendet den Kanal auch, um den GetImage-Rückgabewert zu nehmen und in eine HTTP GETRESPONSE für den Clientbrowser zu übersetzen.

  12. Klicken Sie im Menü Erstellen auf Projektmappe erstellen, um die Richtigkeit Ihrer Arbeit zu bestätigen.

Beispiel

Im folgenden Codebeispiel ist eine Basisschnittstelle gezeigt, die einen Servicebus-Vertrag definiert.

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)
        {
        }
    }
}

Nachdem die Schnittstelle jetzt erstellt ist, fahren Sie mit Schritt 3: Implementieren eines REST-basierten WCF-Dienstvertrags für die Verwendung von Service Bus fort, um die Schnittstelle zu implementieren.

Siehe auch

Anzeigen:
© 2014 Microsoft