Udostępnij za pośrednictwem


Korelacja żądań i odpowiedzi

Korelacja żądań-odpowiedzi jest używana z parą Receive/SendReply do implementowania dwukierunkowej operacji w usłudze przepływu pracy oraz pary Send/ReceiveReply , która wywołuje operację dwukierunkową w innej usłudze sieci Web. Podczas wywoływania dwukierunkowej operacji w usłudze WCF usługa może być tradycyjną usługą opartą na kodzie opartym na kodzie usługą Windows Communication Foundation (WCF) lub usługą przepływu pracy. Aby użyć korelacji żądań-odpowiedzi, należy użyć powiązania dwukierunkowego, takiego jak BasicHttpBinding. Niezależnie od tego, czy wywoływanie lub implementowanie operacji dwukierunkowej, kroki inicjowania korelacji są podobne i opisano je w tej sekcji.

Używanie korelacji w operacji dwukierunkowej z odbieraniem/wysyłaniemReply

Para Receive/SendReply służy do implementowania dwukierunkowej operacji w usłudze przepływu pracy. Środowisko uruchomieniowe używa korelacji żądań-odpowiedzi, aby upewnić się, że odpowiedź jest wysyłana do poprawnego wywołującego. Gdy przepływ pracy jest hostowany przy użyciu programu WorkflowServiceHost, co jest w przypadku usług przepływu pracy, domyślna inicjowanie korelacji jest wystarczająca. W tym scenariuszu Receive/SendReply para jest używana przez przepływ pracy i nie jest wymagana żadna określona konfiguracja korelacji.

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
// Construct a workflow using StartOrder and ReplyToStartOrder.  

Jawne inicjowanie korelacji żądań i odpowiedzi

Jeśli inne operacje dwukierunkowe są równoległe, korelacja powinna zostać jawnie skonfigurowana. Można to zrobić, określając element CorrelationHandle i lub umieszczającSendReplyReceive/wewnątrz obiektu .CorrelationScopeRequestReplyCorrelationInitializer W tym przykładzie Receive/SendReply korelacja żądań-odpowiedzi jest skonfigurowana w parze.

Variable<CorrelationHandle> RRHandle = new Variable<CorrelationHandle>();  
  
Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder",  
    CorrelationInitializers =  
    {  
        new RequestReplyCorrelationInitializer  
        {  
            CorrelationHandle = RRHandle  
        }  
    }  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
// Construct a workflow using StartOrder and ReplyToStartOrder.  

Zamiast jawnie konfigurować korelację CorrelationScope , można użyć działania. CorrelationScope udostępnia niejawne CorrelationHandle działania obsługi komunikatów, które zawiera. W tym przykładzie para jest zawarta Receive/SendReply wewnątrz elementu CorrelationScope. Nie jest wymagana żadna jawna konfiguracja korelacji.

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
CorrelationScope s = new CorrelationScope  
{  
    Body = new Sequence  
    {  
        Activities =
        {  
            StartOrder,  
            // Activities that create the reply.  
            ReplyToStartOrder  
        }  
    }  
};  
  
// Construct a workflow using the CorrelationScope.  

Jeśli wymagane są dodatkowe korelacje, można je skonfigurować przy użyciu właściwości odpowiednich działań obsługi komunikatów przy użyciu CorrelationInitializers żądanych CorrelationInitializer typów.

Używanie korelacji w operacji dwukierunkowej z funkcją Send/ReceiveReply

Receive Działanie może być używane tylko w usłudze przepływu pracy hostowanej przez WorkflowServiceHostusługę , Send a Send/ReceiveReply para może być używana w dowolnym przepływie pracy, który musi wywołać metodę w usłudze sieci Web. Jeśli przepływ pracy jest hostowany przy użyciu WorkflowServiceHost polecenia , domyślna korelacja opisana w poprzedniej sekcji ma zastosowanie, ale jeśli nie, korelacja musi być skonfigurowana jawnie przy użyciu żądanych CorrelationInitializer elementów i CorrelationHandlelub przy użyciu niejawnego zarządzania dojściem w programie CorrelationScope.

W przypadku korzystania z funkcji Add Service Reference on a service with a service operations with two-way operations (Dodawanie odwołania do usługi z operacjami dwukierunkowymi) są generowane działania, które wewnętrznie opakowują Send/ReceiveReply działanie pary z jawnie określonym korelacją żądania/odpowiedzi.