Services fiables

Cet exemple montre comment créer un service fiable en implémentant une calculatrice en tant que service fiable. Étant donné que le service est durable après chaque appel, l'état du service est enregistré. Si le service se recycle, son état peut être restauré au point de persistance le plus récent ; un service de persistance est donc requis.

Bb410767.note(fr-fr,VS.90).gifRemarque :
Cet exemple requiert l'installation de .NET Framework version 3.5 pour être généré et exécuté. Visual Studio 2008 est nécessaire pour l'ouverture des fichiers projet et solution.

Pour plus d'informations sur la configuration de cet exemple, consultez Procédure d'installation unique pour les exemples Windows Communication Foundation. Vous devez exécuter le client calculatrice avec ce service. Pour plus d'informations, consultez les procédures d'installation en fin de rubrique.

Le code suivant illustre le contrat de service pour le service de calculatrice.

[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
    public interface ICalculator
    {
        [OperationContract()]
        int PowerOn();
        [OperationContract()]
        int Add(int value);
        [OperationContract()]
        int Subtract(int value);
        [OperationContract()]
        int Multiply(int value);
        [OperationContract()]
        int Divide(int value);
        [OperationContract()]
        void PowerOff();
    }  

Dans le code suivant, l'attribut DurableServiceAttribute est utilisé dans l'implémentation du service pour spécifier qu'il s'agit d'un service fiable.

[Serializable]
[DurableServiceBehavior]
public class DurableCalculator : ICalculator
{
    int currentValue = default(int);

    [DurableOperationBehavior(CanCreateInstance=true)]
    public int PowerOn()
    {
        return currentValue;
    }

    [DurableOperationBehavior()]
    public int Add(int value)
    {
        return (currentValue += value);
    }

    [DurableOperationBehavior()]
    public int Subtract(int value)
    {
        return (currentValue -= value);
    }

    [DurableOperationBehavior()]
    public int Multiply(int value)
    {
        return (currentValue *= value);
    }

    [DurableOperationBehavior()]
    public int Divide(int value)
    {
        return (currentValue /= value);
    }

    [DurableOperationBehavior(CompletesInstance=true)]
    public void PowerOff()
    {
    }

}

L'attribut DurableOperationAttribute spécifie que l'état d'instance est enregistré après que l'opération a été complétée.

Il y a deux champs qui peuvent être spécifiés sur l'attribut DurableOperationAttribute.

La propriété CanCreateInstance spécifie que l'instance est créée lorsque cette opération est appelée. Pour que CanCreateInsatance puisse fonctionner correctement, l'opération sur laquelle il est spécifié doit être une opération de demande/réponse. Dans cet exemple, le contexte est propagé au client et la durabilité est accomplie par la capacité du client à communiquer avec le service. Si l'opération est unidirectionnelle, le contexte n'est pas propagé au client ; par conséquent, il doit y avoir un autre moyen de passer le contexte au client si une conversation de longue durée et durable doit être menée avec l'instance de service.

La propriété CompletesInstance spécifie que l'instance est complétée après que l'opération sur laquelle celle-ci est spécifiée se termine. L'état est également supprimé de la base de données après que l'opération a été complétée.

Le code suivant illustre le fichier .svc pour héberger cet exemple dans les services IIS (Internet Information Services).

<%@ServiceHost language=c# Debug="true" Service="Microsoft.WorkflowServices.Samples.DurableCalculator" Factory="System.ServiceModel.Activation.ServiceHostFactory" %>

Les liaisons pour le service sont configurées dans le fichier Web.config. Deux points de terminaison avec des liaisons différentes sont exposés : une BasicHttpContextBinding avec les cookies activés et la WSHttpContextBinding pour les clients qui ne souhaitent pas utiliser la BasicHttpContextBinding. La liaison WSHttpContextBinding permet de conserver le contexte utilisé pour acheminer des demandes à une instance de service fiable particulière. L'entrée PersistenceProvider qui spécifie le fournisseur de persistances est localisée dans la section ServiceBehaviors.

Pour configurer et exécuter le service

  1. Pour installer correctement cet exemple à l'aide de scripts, consultez Procédure d'installation unique pour les exemples Windows Communication Foundation.

  2. Dans IIS, activez l'authentification Windows sur le répertoire virtuel ServiceModelSamples.

    Pour activer l'authentification Windows dans IIS 5.1 ou 6.0 :

    1. Ouvrez une fenêtre d'invite de commandes et tapez start inetmgr pour ouvrir le composant logiciel enfichable MMC des services IIS.
    2. Cliquez avec le bouton droit sur la racine virtuelle ServiceModelSamples à l'intérieur de Site Web par défaut, cliquez sur Propriétés, puis cliquez sur l'onglet Sécurité de répertoire.
    3. Sous Authentification et contrôle d'accès, cliquez sur Modifier.
    4. Dans la boîte de dialogue Méthodes d'authentification, sélectionnez Authentification intégrée Windows.

    Pour activer l'authentification Windows dans IIS 7.0 :

    1. Ouvrez une fenêtre d'invite de commandes, puis tapez start inetmgr pour ouvrir le composant logiciel enfichable MMC des services IIS (Internet Information Services).
    2. Sélectionnez la racine virtuelle ServiceModelSamples à l'intérieur de Site Web par défaut.
    3. À l'intérieur du volet d'accueil ServiceModelSamples, double-cliquez sur Authentification à l'intérieur du groupe IIS.
    4. Sélectionnez Authentification Windows, puis l'action Activer.
  3. Générez le projet. Le projet génère et met à jour ServiceModelSamples.

  4. Pour autoriser l'accès au magasin durable :

    1. Exécutez le script CreateStores.cmd localisé dans la rubrique Procédure d'installation unique pour les exemples Windows Communication Foundation. Cet exemple utilise la base de données NetFx35Samples_DurableServiceStore.
    2. Faites du compte d'utilisateur ASP.NET un membre du groupe d'utilisateurs SQL Server.
  5. Pour vous assurer que le service est correctement installé, pointez sur l'adresse https://localhost/ServiceModelSamples/service.svc. Vous devez voir apparaître la page d'aide du service. Pour consulter le document WSDL (Web Services Descriptor Language), tapez https://localhost/ServiceModelSamples/service.svc?wsdl.

  6. Pour exécuter cet exemple, vous devez utiliser Calculator Client, exemple. Il s'agit de l'interface utilisateur de calculatrice créée à l'aide de Windows Presentation Foundation (WPF), laquelle remplit le rôle de client pour le service. Vous pouvez utiliser des points de terminaison différents qui correspondent aux liaisons que le service fournit. Pour modifier les liaisons, cliquez sur l'élément de menu EndPoint et sélectionnez la liaison appropriée, BasicHttpContextBinding ou WSHttpContextBinding.

  7. Pour tester la durabilité du service, fermez le client et rouvrez-le pendant que le client calculatrice s'exécute. Le client calculatrice répond à la même instance de service et affiche l'ID de l'instance en bas. Le client calculatrice utilise un fichier texte appelé Client.ctx pour stocker le contexte dans un endroit durable la première fois qu'un appel est passé (dans le cas présent, dans le répertoire \bin de votre exemple). Lorsque vous rouvrez le client, il vérifie si le fichier est présent. Si le fichier est présent, il applique le contexte stocké au canal créé. Si le service fiable a terminé et si vous ouvrez le client à l'aide du fichier Client.ctx figurant encore dans votre répertoire \bin, celui-ci essaie d'appliquer le contexte au canal. Vous obtenez alors une erreur car l'instance de service fiable avec laquelle vous souhaitez communiquer n'est pas présente. Supprimez le fichier et réessayez.

  8. Vous pouvez également recycler le service fiable en redémarrant IIS. Étant donné que vous utilisez un magasin de persistances après chaque opération, l'état du service est stocké. Par conséquent, lorsque vous essayez de communiquer avec le service depuis le client après avoir redémarré IIS, l'infrastructure reçoit l'instance de service fiable du magasin de persistances et vous pouvez communiquer à l'aide de la même instance.

    Bb410767.note(fr-fr,VS.90).gifRemarque :
    Lorsque vous appelez une opération pour la première fois après avoir redémarré IIS, vous recevez une exception MessageSecurityException, provoquée par un jeton de sécurité périmé sur le canal. Appelez une autre opération et elle réussira.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.