Utilisation de l'activité SendActivity

L'activité SendActivity est utilisée pour modéliser un appel d'opération synchrone côté client défini sur un contrat implémenté par un service qui utilise Windows Communication Foundation (WCF).

Génération du code pour les contrats de service

Pour utiliser une activité SendActivity dans un workflow, vous avez besoin des interfaces de contrat et de la configuration côté client des points de terminaison associées à ces contrats. Pour ce faire, vous pouvez par exemple utiliser l'outil de ligne de commande Svcutil.exe. Par exemple, si un service s'exécute avec un point de terminaison détectable situé à https://localhost:8888/MyService.svc, vous pouvez générer le code nécessaire exigé par l'activité SendActivity à l'aide de la syntaxe :

svcutil.exe https://localhost:8888/MyService .svc

L'outil Svcutil.exe générera un fichier de configuration de l'application que vous pouvez utiliser dans votre application et qui définit le point de terminaison spécifique et les liaisons nécessaires pour utiliser le service. Le deuxième fichier généré contient une classe proxy et les interfaces de contrat actuelles. Les définitions de contrat sont requises par l'activité SendActivity pour la découverte de service. Ces deux fichiers doivent être ajoutés à votre projet de workflow afin que l'activité SendActivity puisse y utiliser les informations.

Si vous avez accès aux interfaces de contrat, vous pouvez les ajouter directement à votre projet sans avoir à utiliser l'outil Svcutil.exe, en vous assurant d'ajouter également la bonne configuration de points de terminaison du client dans le fichier de configuration de l'application.

Appel de méthodes de service

Une activité SendActivity a besoin de certaines informations pour se connecter correctement et appeler des opérations sur un contrat de service : un ChannelToken et des informations d'opération.

Spécification du ChannelToken pour une activité SendActivity

Un point de terminaison WCF contient des informations concernant le nom du contrat, la liaison du contrat, des informations de sécurité et l'adresse. Ces informations sont entrées dans votre fichier de configuration de l'application et peuvent être générées à l'aide de l'outil Svcutil.exe mentionné dans la section précédente. Par exemple, le nœud client dans un fichier de configuration de l'application pour un service qui écoute à l'adresse https://localhost:8888/MyService.svc apparaîtra comme suit :

<client>
    <endpoint address="https://localhost:8888/MyService.svc"
        binding="customBinding" bindingConfiguration="WSHttpContextBinding_MyServiceContract"
        contract="MyService.localhost.MyServiceContract"
        name="WSHttpContextBinding_MyServiceContract">
        <identity>
            <userPrincipalName value="someone@example.com" />
        </identity>
    </endpoint>
</client>

Lorsque vous créez une activité SendActivity, vous créez un objet ChannelToken qui spécifie le nom du canal en définissant System.Workflow.Activities.ChannelToken.Name, l'étendue du canal en définissant System.Workflow.Activities.ChannelToken.OwnerActivityName, et le point de terminaison du client en définissant la propriété System.Workflow.Activities.ChannelToken.EndpointName de l'objet ChannelToken. Vous associez alors l'objet ChannelToken à une instance SendActivity à l'aide de la propriété ChannelToken. Le code suivant indique comment créer une activité SendActivity et un objet ChannelToken et indique également comment associer le ChannelToken à l'activité SendActivity à l'aide des informations de la configuration de l'application montrée précédemment.

SendActivity sendActivity1 = new SendActivity();
ChannelToken channel1 = new ChannelToken();
channel1.EndpointName = "WSHttpContextBinding_MyServiceContract";
channel1.Name = "WSHttpContextBinding_MyServiceContract";
channel1.OwnerActivityName = "Workflow1";
this.sendActivity1.ChannelToken = channel1;
this.sendActivity1.Name = "sendActivity1";

Spécification des informations d'opération pour une activité SendActivity

Une activité SendActivity appelle une opération unique définie dans un contrat unique. Pour ce faire, SendActivity utilise un objet TypedOperationInfo qui contient des informations sur le type de données pour le contrat, ainsi que le nom de l'opération à appeler. La propriété ContractType de la classe TypedOperationInfo fait référence au type d'interface de contrat. La propriété Name accessible par la classe TypedOperationInfo fait référence au nom de l'opération à appeler dans ce type.

System.Workflow.Activities.TypedOperationInfo typedoperationinfo1 = new System.Workflow.Activities.TypedOperationInfo();
typedoperationinfo1.ContractType = typeof(MyServiceContractClient.localhost.MyServiceContract);
typedoperationinfo1.Name = "DoWork";
typedoperationinfo1.PrincipalPermissionName = "";
typedoperationinfo1.PrincipalPermissionRole = "";
this.sendActivity1.ServiceOperationInfo = typedoperationinfo1;

Voir aussi

Tâches

Tâche 2 : créer un client de service de workflow

Référence

SendActivity
TypedOperationInfo
ServiceOperationInfo
ChannelToken

Concepts

Utilisation de l'activité ReceiveActivity
Styles de création de services de workflow

Footer image

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