Condividi tramite


Utilizzo dell'attività ReceiveActivity

L'attività ReceiveActivity è progettata per implementare un'operazione del contratto di un servizio all'interno di un flusso di lavoro. Dato un contratto di servizio, l'attività ReceiveActivity attende che un client si connetta al servizio e quindi esegue le attività figlio in esso contenute.

L'attività ReceiveActivity è in grado di implementare un'operazione del contratto di servizio già definita utilizzando Windows Communication Foundation (WCF) (priorità al contratto) o può generare il contratto di servizio utilizzando le classi di Windows Workflow Foundation (priorità al flusso di lavoro). Per ulteriori informazioni sui diversi stili di creazione dei servizi del flusso di lavoro, vedere Stili di creazione dei servizi del flusso di lavoro.

Implementazione di un contratto di servizio utilizzando l'attività ReceiveActivity

Quando è pianificata l'esecuzione dell'attività ReceiveActivity, questa resterà in ascolto in attesa di una connessione in ingresso da un client su un endpoint del servizio. L'attività ReceiveActivity può implementare una sola operazione definita in un contratto di servizio. L'operazione è associata a un'attività ReceiveActivity tramite l'oggetto TypedOperationInfo. La classe TypedOperationInfo include informazioni su ContractType e il nome dell'operazione, oltre a informazioni di identità necessarie affinché il client esegua correttamente l'operazione. Nell'esempio seguente viene illustrato come creare un'attività ReceiveActivity e associarla a un oggetto TypedOperationInfo per implementare un'operazione definita in un contratto di servizio. Il contratto di servizio è identico al contratto illustrato nella sezione precedente.

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;

Un'operazione è in grado di supportare un numero qualsiasi di parametri, oltre che un valore restituito. Per fornire questo supporto, l'attività ReceiveActivity utilizza il meccanismo di associazione dei parametri di Windows Workflow Foundation tramite la proprietà ParameterBindings. Nell'esempio seguente viene illustrato come utilizzare un'associazione di parametri per associare una proprietà della classe del flusso di lavoro al valore restituito dell'operazione illustrata nel contratto riportato in precedenza. In questo esempio viene creato un oggetto ActivityBind utilizzando la proprietà stringa ReturnValue definita nell'implementazione della classe del servizio di un flusso di lavoro. Viene creato un oggetto WorkflowParameterBinding il quale viene associato all'oggetto ActivityBind utilizzando il metodo SetBinding. L'associazione dei parametri viene infine associata all'attività ReceiveActivity aggiungendola all'insieme 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);

Creazione di associazioni ed endpoint del servizio

Affinché un client si connetta a un servizio del flusso di lavoro, è necessario configurare un endpoint utilizzando informazioni quali l'indirizzo, l'associazione e il tipo del contratto. Questa operazione può essere eseguita utilizzando un file di configurazione dell'applicazione. Oltre alle informazioni dell'endpoint, è possibile utilizzare comportamenti specifici esposti dal servizio. Per il contratto utilizzato in questo argomento, il file App.config illustrato in seguito consente ai client di connettersi al servizio per scambiare informazioni oltre che per scaricare informazioni di contratto sul servizio stesso.

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

In alcuni scenari avanzati è possibile utilizzare l'attività ReceiveActivity. Per ulteriori informazioni, vedere Conversazioni con servizi flusso di lavoro.

Vedere anche

Riferimenti

ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings

Concetti

Stili di creazione dei servizi del flusso di lavoro

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.