Exportieren (0) Drucken
Alle erweitern

Vorgehensweise: Erstellen eines auf REST basierenden Diensts, der auf Service Bus zugreift

Letzte Aktualisierung: September 2014

Microsoft Azure Service Bus unterstützt zurzeit Anwendungen, die als REST-basierte Dienste gelten: eine traditionelle Servicebus-Anwendung, die dem Webprogrammiermodell genügt. Dieser Anwendungstyp verwendet das grundlegende Windows Communication Foundation (WCF)-Programmiermodell: Definieren und Erstellen eines Dienstvertrags, Verwenden einer Bindung und von Anmeldeinformationen zum Herstellen einer Verbindung mit Servicebus usw. Der Hauptunterschied besteht darin, dass eine auf REST basierende Servicebus-Anwendung einen Dienstvertrag verwendet, auf dessen Elemente die Attribute [OperationContract, WebGet] oder [OperationContract, WebInvoke] angewendet werden. Dieses Verhalten definiert die Schnittstelle als REST-Schnittstelle und ermöglicht Servicebus die Interaktion mit anderen Anwendungen im REST-Stil. Aus diesem Grund enthalten die Anwendungen zusätzlichen Code, der ihnen das Erstellen von Nachrichten im HTTP-Stil ermöglicht. Schließlich verwenden alle diese Anwendungen die Bindung WebHttpRelayBinding. Weitere Informationen finden Sie unter Vorgehensweise:Bereitstellen eines REST-basierten Webdiensts über Service Bus. Ein erweitertes Beispiel für eine auf REST basierende Dienstanwendung finden Sie im REST-Lernprogramm zu Service Bus, das seinerseits auf dem Beispiel WebHttp Servicebus basiert.

Der Vorgang des Hostens einer auf REST basierenden Servicebus-Anwendung ähnelt weitestgehend dem Hosten einer Servicebus-Standardanwendung. Die Hauptunterschiede beziehen sich auf den Vertrag und die Konfiguration: Der tatsächliche Hostingvorgang ist grundsätzlich identisch.

  1. Erstellen Sie den Dienst, indem Sie das Standardmuster verwenden, das unter Erstellen eines Diensts für Service Bus definiert ist. Definieren und implementieren Sie also einen Dienstvertrag, konfigurieren und implementieren Sie den Diensthost usw.

    1. Wenn Sie das Attribut OperationContractAttribute auf den Dienstvertrag anwenden, stellen Sie sicher, dass Sie die relevanten Attribute zum Identifizieren der auf REST basierenden Elemente anwenden. Weitere Informationen finden Sie unterVorgehensweise: Vorgehensweise:Bereitstellen eines REST-basierten Webdiensts über Service Bus.

      Der folgende Beispielcode zeigt, wie ein Schnittstellenelement als GET-Element im REST-Stil definiert wird.

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. Wenn Sie den Vertrag implementieren, legen Sie den entsprechenden Inhaltstypheader für die ausgehenden Webantworten wie durch die Anforderungen Ihrer Anwendung definiert fest.

      public ImageService() 
      {
          this.bitmap = Image.FromFile(imageFileName);
      }
      
      public Stream GetImage()
      {
          MemoryStream stream = new MemoryStream();
          this.bitmap.Save(stream, ImageFormat.Jpeg);
      
          stream.Position = 0;
          WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
      
          return stream;
      }        
      
      
      
  2. Erstellen Sie die Adresse für den Dienst, indem Sie die Methode CreateServiceUri verwenden:

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. Erstellen Sie eine neue Instanz von WebServiceHost.

    WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
    

    Die Klasse WebServiceHost wird von der Klasse ServiceHost abgeleitet und ergänzt das WCF-Webprogrammiermodell. Außerdem vereinfacht sie das Hosten REST-basierter Dienste. Es wird empfohlen, WebServiceHost anstelle von ServiceHost in Ihrer auf REST basierenden Servicebus-Anwendungsimplementierung zu verwenden. Weitere Informationen finden Sie unter finden Sie unter WCF REST-Programmiermodell in der WCF-Dokumentation.

  4. Geben Sie die Adresse, die Bindung und die Verträge (auch als "ABCs" bezeichnet: Address, Binding, Contracts) an, die vom Dienstendpunkt verwendet werden.

        <services>
          <!-- Application Service -->
          <service name="Microsoft.ServiceBus.Samples.ImageService"
                   behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IImageContract"
                      binding="webHttpRelayBinding"
                      bindingConfiguration="default"
                      behaviorConfiguration="sharedAccessSignatureClientCredentials"
                      address="" />
        </service>
    

    Hier ist die ABC-Angabe mit dem Endpunkt in der Datei App.config verknüpft. Themenbereich zum Konfigurieren einer Anwendung finden Sie unter Konfigurieren eines WCF-Diensts für die Registrierung bei Service Bus.

    Die einzige Bindung, die für einen Dienstendpunkt in einer REST-basierten Servicebus-Anwendung verwendet wird, ist WebHttpRelayBinding.

  5. Deaktivieren Sie Clientauthentifizierung, wenn erforderlich.

    
        <bindings>
          <!-- Application Binding -->
          <webHttpRelayBinding>
            <binding name="default">
                 <security relayClientAuthenticationType="None" />
            </binding>
          </webHttpRelayBinding>
        </bindings>
    
    

    Standardmäßig erfordert die Bindung WebHttpRelayBinding Clientauthentifizierung. In diesem Schritt wird die Deaktivierung im Element <binding> in der Datei App.config beschrieben, damit der Client keine Anmeldeinformationen bereitstellen muss (z. B., wenn ein Browser verwendet wird). Themenbereich zur Authentifizierung mit Servicebus finden Sie unter Sichern und Authentifizieren einer Service Bus-Verbindung.

  6. Definieren Sie die Sicherheit für Ihre Anwendung:

        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedAccessSignatureClientCredentials">
              <transportClientEndpointBehavior>
                <tokenProvider>
                  <sharedAccessSignature keyName=”RootManageSharedAccessKey” key="**key**" />
                </tokenProvider>
              </transportClientEndpointBehavior>
            </behavior>
          </endpointBehaviors>
        </behaviors>
    
    

    In diesem Beispiel wird die Sicherheit in der Datei App.config konfiguriert. Themenbereich zur Sicherheit finden Sie unter Sichern und Authentifizieren einer Service Bus-Verbindung.

  7. Öffnen Sie den Dienst mithilfe eines Aufrufs von WebServiceHost.Open:

    host.Open()
    
  8. Wenn Sie fertig sind, schließen Sie den Host mit WebServiceHost.Close.

    host.Close();
    

Anzeigen:
© 2015 Microsoft