State Machine Workflow Service, exemple
Cet exemple illustre comment créer un service de workflow à l'aide d'un workflow d'ordinateur d'état et comment implémenter une calculatrice à l'aide d'un workflow de ce type. Il contient, en outre, un processus de longue durée au cours duquel l'état est enregistré automatiquement. Lorsque vous redémarrez le service de workflow, le client peut communiquer avec la même instance de service de workflow, l'état du workflow étant conservé. L'exemple illustre également comment des protocoles au niveau de l'application peuvent être appliqués dans le contrat afin que le workflow lève une exception en cas d'appel inopiné d'une opération sur le service.
Remarque : |
---|
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 One-time Setup Procedure for Windows Communication Foundation Samples.
Le service implémente le contrat de service ICalculator
contenu dans l'exemple de code suivant.
[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();
}
L'exemple implémente un ensemble d'états, chacun d'entre eux disposant d'un ensemble de gestionnaires d'événements. Chaque gestionnaire d'événements contient une activité Receive qui implémente une opération sur le contrat ICalculator
. Le workflow d'ordinateur d'état peut accepter l'ensemble des opérations que l'activité Receive implémente dans l'état, cet état correspondant à un état donné. Ceci facilite la mise en œuvre des protocoles de niveau application.
Le fichier Web.config définit les liaisons pour le service et expose deux points de terminaison avec deux liaisons différentes : une liaison BasicHttpContextBinding pour laquelle les cookies sont activés et une liaison WSHttpContextBinding pour les clients qui ne souhaitent pas utiliser BasicHttpContextBinding. La liaison WSHttpContextBinding facilite la conservation du contexte utilisé pour acheminer les demandes vers une instance de workflow particulière.
Pour installer le service dans les services IIS
Conformez-vous aux instructions d'installation figurant dans la rubrique One-time Setup Procedure for Windows Communication Foundation Samples.
Dans IIS, activez l'authentification Windows sur le répertoire virtuel ServiceModelSamples.
Pour activer l'authentification Windows dans IIS 5.1 ou 6.0 :
- Ouvrez une fenêtre d'invite de commandes, puis tapez start inetmgr pour ouvrir le composant logiciel enfichable MMC des services IIS.
- Cliquez avec le bouton droit sur la racine virtuelle ServiceModelSamples à l'intérieur de Site Web par défaut, cliquez alors sur Propriétés, puis cliquez sur l'onglet Sécurité de répertoire.
- Sous Authentification et contrôle d'accès, cliquez sur Modifier.
- 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 :
- 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).
- Sélectionnez la racine virtuelle ServiceModelSamples à l'intérieur de Site Web par défaut.
- Dans le volet d'accueil ServiceModelSamples, double-cliquez sur l'option Authentification du groupe IIS.
- Sélectionnez Authentification Windows, puis l'action Activer.
Générez le projet. Le projet génère et met à jour ServiceModelSamples.
Pour autoriser l'accès au magasin durable :
- Exécutez le script CreateStores.cmd figurant dans la rubrique One-Time Setup Procedure for the Windows Communication Foundation Samples. Cet exemple utilise la base de données NetFx35Samples_ServiceWorkflowStore.
- Faites du compte d'utilisateur ASP.NET un membre du groupe d'utilisateurs SQL Server.
Pour vous assurer que le service est correctement installé, saisissez l'adresse https://localhost/ ServiceModelSamples/service.svc dans votre navigateur. 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.
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 pour les liaisons fournies par le service. Pour modifier les liaisons, cliquez sur l'élément de menu Point de terminaison, puis sélectionnez la liaison appropriée : BasicHtttpContextBinding ou WSHttpContextBinding.
Pour tester la longévité du service, fermez le client, puis rouvrez-le pendant l'exécution du client de calculatrice. Le client de calculatrice répond à la même instance de service et affiche l'ID de cette instance en bas de la console. Le client de calculatrice utilise un fichier texte appelé Client.ctx pour stocker le contexte dans un endroit bénéficiant d'une longue durée de vie 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 s'assure que ce fichier est présent. Si tel est le cas, il applique le contexte stocké au canal en cours de création. Si le service de workflow 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 recevez alors une erreur parce que l'instance de workflow avec laquelle vous souhaitez communiquer n'est pas présente. Supprimez le fichier et réessayez.
Vous pouvez également recycler le service de workflow 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 de workflow reçoit l'instance de workflow du magasin de persistances et vous pouvez communiquer à l'aide de la même instance.
Remarque : 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 la présence d'un jeton de sécurité périmé sur le canal. Appelez une autre opération et elle réussira.