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.