Udostępnij przez


korelacja Request-Reply

Korelacja żądań-odpowiedzi jest używana z parą Receive/SendReply do implementacji dwukierunkowej operacji w usłudze przepływu pracy oraz z parą Send/ReceiveReply wywołującą operację dwukierunkową w innej usłudze internetowej. Podczas wywoływania dwukierunkowej operacji w usłudze WCF, usługa może być tradycyjną usługą opartą na kodzie Windows Communication Foundation (WCF) lub usługą opartą na przepływie pracy. Aby użyć korelacji żądań-odpowiedzi, należy użyć powiązania dwukierunkowego, takiego jak BasicHttpBinding. Niezależnie od tego, czy chodzi o wywołanie, czy o implementację operacji dwukierunkowej, kroki inicjowania korelacji są podobne i opisano je w tej sekcji.

Używanie korelacji w operacji Two-Way z odbieraniem i wysyłaniem odpowiedzi

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 przypadkiem dla usług procesu pracy, domyślna inicjalizacja korelacji jest wystarczająca. W tym scenariuszu Receive/SendReply para jest wykorzystywana w przepływie 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.  

Inicjowanie korelacji Request-Reply w sposób jawny

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

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ę, można użyć aktywności CorrelationScope. CorrelationScope zapewnia domyślny kontekst dla działań komunikacyjnych, które zawiera. W tym przykładzie Receive/SendReply para jest zawarta wewnątrz 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ć, korzystając z właściwości odpowiednich działań komunikacyjnych oraz żądanych CorrelationInitializers typów.

Używanie korelacji w operacji Two-Way z operacją Send/ReceiveReply

Receive Działanie może być używane tylko w usłudze przepływu pracy hostowanej przez WorkflowServiceHost, Send oraz para Send/ReceiveReply 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, domyślna korelacja opisana w poprzedniej sekcji ma zastosowanie, ale jeśli nie, korelacja musi być skonfigurowana jawnie przy użyciu żądanych CorrelationInitializer i CorrelationHandle lub przy użyciu niejawnego zarządzania dojściem przy użyciu CorrelationScope.

Podczas korzystania z funkcji Dodaj odwołanie do usługi dla usługi z operacjami dwukierunkowymi, generowane są działania, które wewnętrznie opakowują działania pary Send/ReceiveReply z jawnie określoną korelacją żądania/odpowiedzi.