Exporter (0) Imprimer
Développer tout

Procédure : Hébergement d’un service WCF utilisant le service Service Bus

Mis à jour: février 2015

L'hébergement du service est l'étape finale de la création d'une application Service Bus. Avant d'atteindre ce point, vous avez défini et implémenté le contrat de service, défini et configuré le point de terminaison du service et créé les informations d'identification de sécurité. Pour plus d'informations sur les étapes à suivre avant d'héberger l'application, consultez Génération d'un service pour le Service Bus. L'étape suivante consiste à rassembler les différentes parties et à les faire fonctionner. Pour cela, vous devez utiliser l'hôte de service qui, à partir de l'URL de votre projet et du contrat, crée une connexion à Service Bus.

La première procédure décrit la création d'un service qui utilise Service Bus, les paramètres de configuration étant définis par programmation. La seconde procédure indique comment créer un service quand la majeure partie de la configuration est spécifiée dans le fichier App.config. Elle suit l'exemple NetOneWay présenté dans le Kit de développement logiciel (SDK) Microsoft Azure. Pour utiliser une méthode hybride faisant appel à la fois à la configuration par programmation et à un fichier App.config, reportez-vous aux étapes 1 à 4 du Didacticiel sur la messagerie relayée de Service Bus.

Pour une présentation complète de l'hébergement d'une application, consultez la page Hosting Services, dans la documentation Windows Communication Foundation (WCF).

  1. Créez une adresse pour votre service.

    L'adresse de votre projet Service Bus est utilisée à la fois dans les applications de service et les applications clientes. Dans le cas d'un service, l'URI sert à déterminer où Service Bus présente le service. Pour un client, l'URI détermine où le client recherche le service :

    string servicePath = "ServicePath";
    string serviceNamespace = "ServiceNamespace";
    Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);
    
    
  2. Créez une instance de ServiceHost.

    host = new ServiceHost(typeof(EchoService), uri);
    

    Dans cet exemple, l'hôte du service utilise l'adresse fournie en plus du type que le contrat de service implémente. Dans cet exemple, la classe qui implémente le contrat de service s'appelle EchoService.

  3. Créez une description du contrat avec un appel à ContractDescription.

    ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
    

    ContractDescription lie le contrat à l'implémentation à utiliser. Dans cet exemple, le contrat est défini dans IEchoContract, et l'implémentation du contrat est EchoService.

  4. Définissez l'adresse et la liaison du point de terminaison :

    ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
    serviceEndPoint.Address = new EndpointAddress(uri);
    serviceEndPoint.Binding = new NetTcpRelayBinding();
    
  5. Ajoutez les comportements supplémentaires éventuels au point de terminaison, par exemple le comportement de sécurité ou de publication :

    serviceEndPoint.Behaviors.Add(sharedAccessSignatureServiceBusCredential);
    

    Dans cet exemple de code, sharedAccessSignatureServiceBusCredential a été créé précédemment pour le stockage des informations d'identification de sécurité.

  6. Ajoutez le point de terminaison du service à l'instance d'hôte de service. Cette étape permet d'indiquer le point de terminaison à instancier.

    host.Description.Endpoints.Add(serviceEndPoint);
    
  7. Ouvrez le service à l'aide d'un appel à ServiceHost.Open.

    En cas de succès, une application cliente peut contacter le service et communiquer avec le service par l'intermédiaire de Service Bus, sans qu'aucune autre action ne soit nécessaire. Toutefois, vous voudrez peut-être effectuer d'autres tâches, par exemple notifier l'utilisateur du succès de l'hôte.

    host.Open();
    
    Console.WriteLine(String.Format("Listening at: {0}", endPoint));
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  8. Une fois que vous avez terminé, fermez l'hôte à l'aide de ServiceHost.Close.

    host.Close();
    

  1. Créez le nom du projet qui sera présenté dans Service Bus :

    string serviceBusProjectName = "myProjectNameHere";
    

  2. Créez l'URI de votre service :

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusProjectName, "OnewayService");
    
  3. Créez une instance de l'ServiceHost.

    ServiceHost host = new ServiceHost(typeof(LogService), uri);
    

    Ici, l'hôte du service utilise l'adresse fournie en plus du type que le contrat de service implémente. Dans cet exemple, la classe qui implémente le contrat de service s'appelle LogService.

  4. En cas de succès, une application cliente peut contacter le service et communiquer avec le service par l'intermédiaire de Service Bus, sans qu'aucune autre action ne soit nécessaire.

    host.Open();
    
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  5. Une fois que vous avez terminé, fermez l'hôte à l'aide de ServiceHost.Close.

    host.Close();
    
  6. Dans le fichier App.config, ajoutez les informations d'identification et de liaison de votre projet.

    Vous trouverez un exemple de fichier App.config contenant ces informations dans l'exemple de code à la fin de cette rubrique.

Exemple

L'exemple suivant illustre la définition et la création d'une application de service par programmation.

    class Program
    {
        static void Main(string[] args)
        {
            string servicePath = "ServicePath";
            string serviceNamespace = "ServiceNamespace";
            string keyName = "RootManageSharedAccessKey";
            string key = "YOUR_KEY";

            // Construct a Service Bus URI
            Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);

            // Create a Behavior for the Credentials
            TransportClientEndpointBehavior sharedAccessSignatureServiceBusCredential = new TransportClientEndpointBehavior();
            
            sharedAccessSignatureSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, key);

            // Create the Service Host 
            host = new ServiceHost(typeof(EchoService), uri);
            ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
            ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
            serviceEndPoint.Address = new EndpointAddress(uri);
            serviceEndPoint.Binding = new NetTcpRelayBinding();
            serviceEndPoint.Behaviors.Add(sharedSecretServiceBusCredential);
            host.Description.Endpoints.Add(serviceEndPoint);

            host.Open();

            Console.WriteLine(String.Format("Listening at: {0}", endPoint));
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            host.Close();
        }
    }




//Service that is configured mainly with an App.config file
   class Program
    {
        static void Main(string[] args)
        {
            string serviceNamespace = GetServiceNamespace();
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "OnewayService");

            ServiceHost host = new ServiceHost(typeof(OnewayService), address);
            host.Open();

            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            host.Close();
        }
    }


//App.config file associated with the previous code sample

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="sharedAccessSignatureClientCredentials">
          
          <transportClientEndpointBehavior>
            <tokenProvider>
              <sharedAccessSignature keyName=”RootManageSharedAccessKey” key="**key**" />
            </tokenProvider>
          </transportClientEndpointBehavior>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <!-- Application Binding -->
      <netOnewayRelayBinding>
        <binding name="default" />
      </netOnewayRelayBinding>
    </bindings>
    <services>
      <service name="Microsoft.ServiceBus.Samples.OnewayService">
        <endpoint address="" behaviorConfiguration="sharedAccessSignatureClientCredentials"
          binding="netOnewayRelayBinding" bindingConfiguration="default"
          name="RelayEndpoint" contract="Microsoft.ServiceBus.Samples.IOnewayContract" />
      </service>
    </services>
   
  </system.serviceModel>
</configuration>

Voir aussi

Afficher:
© 2015 Microsoft