Partager via


Styles de création de services de workflow

Windows Workflow Foundation prend en charge la capacité de connexion à un service existant et d'échange d'informations depuis ce service, en fonction des informations de contrat reçues au moment de la conception à l'aide d'un outil de découverte de service tel que Svcutil.exe. Toutefois, Windows Workflow Foundation prend également en charge la capacité de générer la définition et l'implémentation d'un contrat de service à l'aide des nouvelles classes Windows Workflow Foundation conçues spécifiquement pour créer des services basés sur la communication.

Services de workflow « contrat en premier »

Un service de workflow « contrat en premier » est un workflow qui utilise les informations d'un contrat de service préexistant. Vous devez vous assurer que le contrat est disponible et inclus dans le projet de service de workflow. Après avoir créé ces informations de contrat, l'activité ReceiveActivity fournie par Windows Workflow Foundation peut être utilisée pour implémenter une opération de contrat de service spécifique.

Une activité SendActivity est requise pour consommer un service dans le workflow et un contrat de service préexistant est requis par l'activité SendActivity. Il n'y a aucune configuration dans Windows Workflow Foundation permettant de créer un contrat de service et d'appeler un service à l'aide de ce contrat dans le même projet.

Définition d'un contrat de service dans un projet de workflow

Vous pouvez définir une interface de contrat de service dans le projet de workflow et implémenter une opération depuis ce contrat à l'aide de l'activité ReceiveActivity. L'exemple suivant montre comment définir un contrat de service à l'aide de ServiceContractAttribute pour le contrat et de OperationContractAttribute pour chaque opération prise en charge par ce contrat.

using System;
using System.ServiceModel;

namespace Microsoft.WorkflowServices.Samples
{
    [ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
    public interface IContractFirstService
    {
        [OperationContract()]
        string DoWork();
    }
}

Une activité ReceiveActivity peut utiliser la définition de service indiquée ci-dessus pour implémenter, par exemple, l'opération DoWork définie dans ce contrat. En outre, chaque activité ReceiveActivity peut seulement implémenter une opération unique pour un contrat.

Services de workflow « workflow en premier »

Dans la section précédente, un service « contrat en premier » est défini comme un service de workflow qui implémente une opération ou plusieurs opérations pour un contrat de service préexistant.

Windows Workflow Foundation prend également en charge la capacité de définir un contrat de service par programme à l'aide des classes Windows Workflow Foundation. Toutefois, comme dans un service « contrat en premier », une activité SendActivity ne peut pas créer son propre contrat de service pour communiquer avec un service externe. Ce comportement est utilisé par l'activité ReceiveActivity pour implémenter une opération définie par un contrat de service.

La classe OperationInfo dans Windows Workflow Foundation peut être utilisée pour définir un service de workflow. Les informations de contrat elles-mêmes sont définies à l'aide de la propriété ContractName et le nom de l'opération est défini à l'aide du paramètre Name. Si l'opération prend en charge les paramètres, notamment une valeur de retour, utilisez la classe OperationParameterInfo et ajoutez chaque paramètre à la collection Parameters de l'objet OperationInfo.

NoteRemarque :

Pour les valeurs de retour, utilisez la valeur "(ReturnValue)" de la propriété Name et la valeur -1 de la propriété Position de l'objet OperationParameterInfo que vous êtes en train de créer.

L'exemple suivant indique comment créer un service de workflow « workflow en premier » à l'aide des classes OperationInfo et OperationParameterInfo. Le contrat de service est nommé WorkflowFirstContract et il contient une opération unique nommée DoWork.

OperationInfo doWorkOperation = new OperationInfo();
OperationParameterInfo returnValueParameter = new OperationParameterInfo();

doWorkOperation.ContractName = "WorkflowFirstContract";
doWorkOperation.Name = "DoWork";
returnValueParameter.Attributes = ((System.Reflection.ParameterAttributes)((System.Reflection.ParameterAttributes.Out | System.Reflection.ParameterAttributes.Retval)));
returnValueParameter.Name = "(ReturnValue)";
returnValueParameter.ParameterType = typeof(string);
returnValueParameter.Position = -1;
doWorkOperation.Parameters.Add(operationparameterinfo1);

Voir aussi

Référence

ServiceContractAttribute
ReceiveActivity
SendActivity
OperationInfo

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.