Condividi tramite


Utilizzo dell’attività SendActivity.

L'attività SendActivity viene utilizzata per modellare un richiamo dell'operazione sincrona lato client definito in un contratto implementato da un servizio che utilizza Windows Communication Foundation (WCF).

Generazione di codice per i contratti di servizio

Per utilizzare un'attività SendActivity all'interno di un flusso di lavoro sono necessarie le interfacce del contratto e la configurazione lato client degli endpoint associati ai contratti in questione. Un modo per raggiungere questo risultato è utilizzare lo strumento da riga di comando Svcutil.exe. Ad esempio, se un servizio è in esecuzione con un endpoint individuabile situato in https://localhost:8888/MyService.svc, è possibile generare il codice necessario per l'attività SendActivity utilizzando la sintassi:

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

Lo strumento Svcutil.exe genererà un file di configurazione dell'applicazione che è possibile utilizzare nell'applicazione che definisce l'endpoint specifico e le associazioni necessarie per l'utilizzo del servizio. Il secondo file generato contiene una classe proxy e le effettive interfacce del contratto. Le definizioni del contratto sono necessarie per l'attività SendActivity per l'individuazione del servizio. Questi due file devono essere aggiunti al progetto flusso di lavoro così che l'attività SendActivity possa utilizzare le informazioni in essi contenute.

Se si ha accesso alle interfacce del contratto, è possibile aggiungerle direttamente al progetto senza dovere utilizzare lo strumento Svcutil.exe, assicurandosi di aggiungere anche la configurazione degli endpoint client corretta nel file di configurazione dell'applicazione.

Richiamare metodi di servizio

Un'attività SendActivity ha bisogno di alcune informazioni per connettersi correttamente e richiamare operazioni di un contratto di servizio: una classe ChannelToken e informazioni dell'operazione.

Specificare ChannelToken per un'attività SendActivity

Un endpoint WCF contiene informazioni riguardo al nome del contratto, all'associazione del contratto, informazioni sulla protezione e l'indirizzo. Queste informazioni vengono inserite nel file di configurazione dell'applicazione e possono essere generate utilizzando lo strumento Svcutil.exe menzionato nella sezione precedente. Ad esempio, il nodo client all'interno di un file di configurazione dell'applicazione per un servizio che ascolta all'indirizzo https://localhost:8888/MyService.svc apparirebbe come segue:

<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>

Quando si crea un'attività SendActivity, si crea un oggetto ChannelToken che specifica il nome del canale impostando System.Workflow.Activities.ChannelToken.Name, l'ambito del canale impostando System.Workflow.Activities.ChannelToken.OwnerActivityNamee l'endpoint client impostando la proprietà System.Workflow.Activities.ChannelToken.EndpointName dell'oggetto ChannelToken. Quindi si associa l'oggetto ChannelToken a un'istanza della classe SendActivity utilizzando la proprietà ChannelToken. Nel codice seguente viene illustrato come creare un'attività SendActivity e un oggetto ChannelToken e viene anche illustrato come associare una classe ChannelToken all'attività SendActivity utilizzando le informazioni di configurazione dell'applicazione mostrata in precedenza.

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";

Specificare le informazioni dell'operazione per un'attività SendActivity

Un'attività SendActivity chiama una sola operazione definita all'interno di un solo contratto. Per ciò, la classe SendActivity utilizza un oggetto TypedOperationInfo che contiene informazioni sul tipo di dati per il contratto così come il nome dell'operazione da richiamare. La proprietà ContractType della classe TypedOperationInfo si riferisce al tipo di interfaccia del contratto. La proprietà Name cui viene effettuato l'accesso tramite la classe TypedOperationInfo si riferisce al nome dell'operazione per effettuare chiamate all'interno di quel tipo.

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;

Vedere anche

Attività

Attività 2: Creare un client del servizio del flusso di lavoro

Riferimenti

SendActivity
TypedOperationInfo
ServiceOperationInfo
ChannelToken

Concetti

Utilizzo dell'attività ReceiveActivity
Stili di creazione dei servizi del flusso di lavoro

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.