Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout

Étape 4 : héberger et exécuter un service web de base à inscrire auprès de Service Bus

Mis à jour: janvier 2015

Voici la quatrième des sept tâches requises pour la création d'une application de service Service Bus de base et d'un client qui peut appeler le service. Pour obtenir une vue d’ensemble des tâches, consultez le Didacticiel sur la messagerie relayée de Service Bus. Cette rubrique décrit l'exécution d'un service Service Bus de base.

Une liste complète du code écrit dans cette tâche est fournie dans l'exemple suivant la procédure.

Durée estimée : 10 minutes

  1. Ajoutez une référence vers Microsoft.ServiceBus.dll au projet : consultez Utilisation du package NuGet Service Bus.

    noteRemarque
    Lors de l'utilisation d'un compilateur de ligne de commande (par exemple, Csc.exe), vous devez aussi fournir le chemin des assemblys.

  2. Dans Program.cs, ajoutez une instruction using pour l'espace de noms Microsoft.ServiceBus.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus est l'espace de noms contenant des API qui vous permettent d'accéder par programme à de nombreuses fonctionnalités de base du Service Bus. Vous utiliserez très probablement cet espace de noms dans toutes vos applications Service Bus.

  3. Dans la méthode Main(), créez trois variables dans lesquelles stocker espace de noms de service, le nom de l'émetteur et le secret de l'émetteur (une information d'identification nom/mot de passe) qui sont lus dans la fenêtre de la console.

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    

    Le nom et le secret de l'émetteur serviront plus loin pour accéder au projet Service Bus. Le espace de noms de service est transmis en tant que paramètre vers CreateServiceUri pour créer un URI de service.

  4. À l'aide d'un objet TransportClientEndpointBehavior, déclarez que vous utiliserez un secret partagé comme type d'information d'identification. Ajoutez le code suivant directement sous le code ajouté au cours de la dernière étape.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    

  1. En suivant le code que vous avez ajouté à la dernière étape, créez une instance Uri pour l'adresse de base du service. Cet URI spécifie le schéma Service Bus, le espace de noms de service et le chemin de l'interface du service.

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    

    “sb” est une abréviation du schéma Service Bus et indique que le protocole utilisé est TCP. Cela était aussi indiqué précédemment dans le fichier de configuration, lorsque NetTcpRelayBinding était spécifié comme liaison.

    Dans ce didacticiel, l'URI est sb://putServiceNamespaceHere.windows.net/EchoService.

  1. Définissez le mode de connectivité sur AutoDetect.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    Le mode de connectivité décrit le protocole que le service utilise pour communiquer avec le Service Bus, HTTP ou TCP. À l'aide du paramètre AutoDetect par défaut, le service tente de se connecter au Service Bus via TCP, si ce protocole est disponible, sinon via HTTP. Notez que cela diffère du protocole que le service spécifie pour la communication client. Ce protocole est déterminé par la liaison utilisée. Par exemple, un service peut utiliser la liaison BasicHttpRelayBinding, qui spécifie que son point de terminaison (exposé sur le Service Bus) communique avec des clients via HTTP. Ce même service pourrait spécifier ConnectivityMode.AutoDetect pour que le service communique avec le Service Bus via TCP.

  2. Créez l'hôte de service, à l'aide de l'URI précédemment créé dans cette section.

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

    L'hôte du service est l'objet WCF qui instancie le service. Ici, vous transmettez le type de service que vous souhaitez créer (un type EchoService) ainsi que l'adresse à laquelle vous souhaitez l'exposer.

  3. Au début du fichier Program.cs, ajoutez des références à System.ServiceModel.Description et à Microsoft.ServiceBus.Description.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. De retour dans Main(), configurez le point de terminaison permettant d'activer l'accès public.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Cette étape informe le Service Bus que votre application peut être trouvée publiquement en examinant le flux ATOM du Service Bus de votre projet. Si vous définissez DiscoveryType sur private, un client pourrait toujours accéder au service. Cependant, le service n'apparaîtrait pas lorsqu'il effectuerait des recherches dans l'espace de noms Service Bus. À la place, le client devrait connaître le chemin du point de terminaison au préalable. Pour plus d'informations, consultez Découverte et exposition d'un service Service Bus.

  5. Appliquez les informations d'identification du service aux points de terminaison de service définis dans le fichier App.config :

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    

    Comme mentionné dans l'étape précédente, vous pouvez avoir déclaré plusieurs services et points de terminaison dans le fichier de configuration. Si tel est le cas, ce code traverserait le fichier de configuration pour rechercher chaque point de terminaison auquel vos informations d'identification doivent être appliquées. Cependant, dans le cadre de ce didacticiel, le fichier de configuration ne comprend qu'un seul point de terminaison.

  1. Ouvrez le service.

    host.Open();
    
  2. Informez l'utilisateur que le service est en cours d'exécution et expliquez comment le fermer.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Lorsque vous avez terminé, fermez l'hôte de service.

    host.Close();
    
  4. Appuyez sur F6 pour générer le projet.

Exemple

L'exemple suivant inclut le contrat de service et l'implémentation à partir des étapes précédemment décrites dans le didacticiel et héberge le service dans une application console. Compilez les éléments suivants dans un fichier exécutable nommé EchoService.exe.

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Description;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);


            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            // Close the service.
            host.Close();
        }
    }
}

Maintenant que l'interface est créée, passez à l'Étape 5 : créer un client WCF pour le contrat de service pour l'implémenter.

Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2015 Microsoft