Exporter (0) Imprimer
Développer tout

Procédure : créer un service REST accédant à Service Bus

Mis à jour: septembre 2014

Microsoft Azure Service Bus prend actuellement en charge des applications pouvant être qualifiées de services REST : une application Service Bus classique qui est conforme au modèle de programmation web. Ce style d'application utilise le modèle de programmation Windows Communication Foundation (WCF) de base : définition et création d'un contrat de service, utilisation d'une liaison et d'informations d'identification de sécurité pour se connecter à Service Bus, etc. La nouveauté est constituée par une application Service Bus REST qui utilise un contrat de service pour lequel les attributs [OperationContract, WebGet] ou [OperationContract, WebInvoke] sont appliqués aux membres. Ces comportements définissent l'interface comme une interface REST et permettent à Service Bus d'interagir avec les autres applications REST. Par conséquent, les applications contiennent du code supplémentaire leur permettant de générer des messages HTTP. Enfin, toutes ces applications utilisent la liaison WebHttpRelayBinding. Pour plus d'informations, consultez Procédure : Exposer un service Web REST par le biais de Service Bus. Pour obtenir un exemple développé d'une application de service REST, consultez le Didacticiel REST pour Service Bus, qui est lui-même fondé sur l'exemple WebHttp Service Bus.

Le processus d'hébergement d'une application Service Bus REST s'apparente à l'hébergement d'une application Service Bus standard. Les principales différences concernent le contrat et la configuration : le processus d'hébergement réel est fondamentalement identique.

  1. Créez le service en utilisant le modèle standard comme défini dans Génération d'un service pour Service Bus, à savoir définir et implémenter un contrat de service, configurer et implémenter l'hôte de service, etc.

    1. Quand vous appliquez l'attribut OperationContractAttribute au contrat de service, vérifiez que vous appliquez les attributs pertinents pour identifier les membres REST. Rubrique Pour plus d'informations, consultezProcédure : Procédure : Exposer un service Web REST par le biais de Service Bus.

      L'exemple de code illustre comment baliser un membre d'interface en tant que membre GET de style REST.

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. Quand vous implémentez le contrat, définissez l'en-tête du type de contenu approprié pour les réponses web sortantes, comme défini dans les besoins de votre application.

      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. Créez l'adresse du service en utilisant la méthode CreateServiceUri :

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. Créez une instance de WebServiceHost.

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

    La classe WebServiceHost est dérivée de la classe ServiceHost et complète le modèle de programmation web WCF. Elle facilite également l'hébergement des services REST. Nous vous recommandons d'utiliser WebServiceHost au lieu de ServiceHost dans l'implémentation de votre application Service Bus REST. Pour plus d'informations, consultez Modèle de programmation WCF REST dans la documentation WCF.

  4. Spécifiez l'adresse, la liaison et les contrats (également appelés « ABC », ou Address, Binding et Contracts) utilisés par le point de terminaison du service.

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

    Ici, ils sont liés au point de terminaison du fichier App.config. Pour plus d'informations sur la configuration d'une application, consultez Configuration d'un service WCF pour s'inscrire auprès de Service Bus.

    La seule liaison à utiliser pour un point de terminaison de service dans une application Service Bus REST est WebHttpRelayBinding.

  5. Si nécessaire, désactivez l'authentification client.

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

    Par défaut, la liaison WebHttpRelayBinding nécessite l'authentification client. Cette étape décrit comment la désactiver dans l'élément <binding> du fichier App.config pour que le client ne présente plus d'informations d'identification (par exemple, quand vous utilisez un navigateur). Pour plus d'informations sur sur l'authentification avec Service Bus, consultez Sécurisation et authentification d'une connexion Service Bus.

  6. Définissez la sécurité de votre application :

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

    Dans cet exemple, la sécurité est définie dans le fichier App.config. Pour plus d'informations sur la sécurité, consultez Sécurisation et authentification d'une connexion Service Bus.

  7. Ouvrez le service à l'aide d'un appel à WebServiceHost.Open :

    host.Open()
    
  8. Quand vous avez terminé, fermez l'hôte avec WebServiceHost.Close.

    host.Close();
    

Afficher:
© 2014 Microsoft