Utilisation de l'activité ReceiveActivity
L'activité ReceiveActivity est conçue pour implémenter une opération de contrat de service dans un workflow. En fonction du contrat de service, l'activité ReceiveActivity attendra jusqu'à ce qu'un client se connecte au service puis exécute les activités enfants qu'il contient.
L'activité ReceiveActivity peut implémenter une opération de contrat de service déjà définie à l'aide de Windows Communication Foundation (WCF) (« contrat en premier ») ou peut générer le contrat de service à l'aide des classes Windows Workflow Foundation (« workflow en premier »). Pour plus d'informations sur les différents styles de création de service du workflow, consultez Styles de création de services de workflow.
Implémentation d'un contrat de service à l'aide de l'activité ReceiveActivity
Lorsque l'activité ReceiveActivity est planifiée pour s'exécuter, elle écoutera la connexion entrante d'un client à un point de terminaison de service. L'activité ReceiveActivity peut implémenter uniquement une opération unique définie dans un contrat de service. L'opération est associée à une activité ReceiveActivity à l'aide d'un objet TypedOperationInfo. La classe TypedOperationInfo inclut des informations à propos du ContractType et du nom de l'opération, ainsi que les informations d'identité dont le client à besoin pour exécuter l'opération avec succès. L'exemple suivant affiche comment créer une activité ReceiveActivity et associer un objet TypedOperationInfo pour implémenter une opération définie dans un contrat de service. Le contrat de service est le même que celui présenté dans la section précédente.
this.doWorkReceiveActivity = new ReceiveActivity();
TypedOperationInfo doWorkOperationInfo = new TypedOperationInfo();
this.doWorkReceiveActivity.CanCreateInstance = true;
this.doWorkReceiveActivity.Name = "doWorkReceiveActivity";
doWorkOperationInfo.ContractType = typeof(Microsoft.WorkflowServices.Samples.IContractFirstService);
doWorkOperationInfo.Name = "DoWork";
doWorkOperationInfo.PrincipalPermissionRole = "";
this.doWorkReceiveActivity.ServiceOperationInfo = doWorkOperationInfo;
Une opération peut prendre en charge un nombre infini de paramètres ainsi que de valeurs de retour. Pour pouvoir les prendre en charge, l'activité ReceiveActivity utilise le mécanisme du paramètre de liaison de Windows Workflow Foundation à l'aide de sa propriété ParameterBindings. L'exemple suivant montre comment utiliser un paramètre de liaison pour associer la propriété d'une classe de workflow à la valeur de retour de l'opération indiquée précédemment dans le contrat. Dans cet exemple, un objet ActivityBind est créé à l'aide de la propriété de type chaîne ReturnValue définie dans une implémentation de classe du service du workflow. Un WorkflowParameterBinding est ensuite créé et est associé à l'objet ActivityBind à l'aide de la méthode SetBinding. Enfin, la liaison du paramètre est associée à l'activité ReceiveActivity en l'ajoutant à la collection ParameterBindings.
ActivityBind activitybind1 = new ActivityBind();
activitybind1.Name = "ContractFirstServiceWorkflow";
activitybind1.Path = "ReturnValue";
WorkflowParameterBinding returnValueBinding = new WorkflowParameterBinding();
returnValueBinding.ParameterName = "(ReturnValue)";
returnValueBinding.SetBinding(WorkflowParameterBinding.ValueProperty, ((ActivityBind)(activitybind1)));
this.doWorkReceiveActivity.ParameterBindings.Add(returnValueBinding);
Création des liaisons de service et de points de terminaison
Pour qu'un client se connecte à un service de workflow, un point de terminaison doit être configuré à l'aide de l'adresse, de la liaison et des informations sur le type de contrat. Cela peut être accompli à l'aide d'un fichier de configuration de l'application. En plus des informations sur le point de terminaison, les comportements spécifiques d'un service peuvent également être utilisés. Pour le contrat utilisé dans cette rubrique, le fichier App.config présenté ci-dessous autorisera les clients à se connecter au service pour échanger des informations, ainsi qu'à télécharger des informations de contrat sur le service lui-même.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.WorkflowServices.Samples.ContractFirstServiceWorkflow" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="https://localhost:8888/ContractFirstService.svc" />
</baseAddresses>
</host>
<endpoint address ="" binding="wsHttpContextBinding" contract="Microsoft.WorkflowServices.Samples.IContractFirstService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<windowsAuthentication
allowAnonymousLogons="false"
includeWindowsGroups="true" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Il existe certains scénarios avancés dans lesquels l'activité ReceiveActivity peut être utilisée. Pour plus d'informations, consultez Conversations avec les services de workflow.
Voir aussi
Référence
ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings
Concepts
Styles de création de services de workflow
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.