Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Anforderungs-Antwort-Korrelation wird mit einem Receive/SendReply-Paar verwendet, um einen bidirektionalen Vorgang in einem Workflowdienst zu implementieren, und mit einem Send/ReceiveReply-Paar, das einen bidirektionalen Vorgang in einem anderen Webdienst aufruft. Beim Aufrufen eines bidirektionellen Vorgangs in einem WCF-Dienst kann der Dienst entweder ein herkömmlicher imperativer codebasierter Windows Communication Foundation (WCF)-Dienst oder ein Workflowdienst sein. Um die Anforderungs-Antwort-Korrelation zu verwenden, muss eine bidirektionale Bindung wie z.B. BasicHttpBinding verwendet werden. Unabhängig davon, ob sie einen bidirektionale Vorgang aufrufen oder implementieren, sind die Korrelationsinitialisierungsschritte ähnlich und werden in diesem Abschnitt behandelt.
Verwendung der Korrelation in einer Two-Way-Operation mit Empfangen/AntwortSenden
Ein Receive/SendReply Paar wird verwendet, um einen bidirektionalen Vorgang in einem Workflowdienst zu implementieren. Die Laufzeit verwendet die Anforderung-Antwort-Korrelation, um sicherzustellen, dass die Antwort an den richtigen Aufrufer weitergeleitet wird. Wenn ein Workflow mithilfe von WorkflowServiceHost gehostet wird, was bei Workflowdiensten der Fall ist, ist die Standardkorrelationsinitialisierung ausreichend. In diesem Szenario wird ein Receive/SendReply Paar von einem Workflow verwendet, und es ist keine spezifische Korrelationskonfiguration erforderlich.
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.
Explizites Initialisieren der Anforderung-Antwort-Korrelation
Wenn andere bidirektionale Vorgänge parallel sind, sollte die Korrelation explizit konfiguriert werden. Dies kann durch Angabe von CorrelationHandle und RequestReplyCorrelationInitializer oder durch Platzieren von Receive/SendReply innerhalb eines CorrelationScope erfolgen. In diesem Beispiel wird die Korrelation zur Anforderungsantwort in einem Receive/SendReply Paar konfiguriert.
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.
Anstatt die Korrelation explizit zu konfigurieren, kann eine CorrelationScope Aktivität verwendet werden. CorrelationScope stellt ein implizites CorrelationHandle-Objekt für die darin enthaltenen Messagingaktivitäten bereit. In diesem Beispiel ist ein Receive/SendReply-Paar in einem CorrelationScope-Objekt enthalten. Es ist keine explizite Korrelationskonfiguration erforderlich.
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.
Wenn zusätzliche Korrelationen erforderlich sind, können sie mithilfe der CorrelationInitializers Eigenschaft der jeweiligen Messagingaktivitäten mithilfe der gewünschten CorrelationInitializer Typen konfiguriert werden.
Verwendung von Korrelation in einem Two-Way-Vorgang mit Senden/Antwort empfangen
Während die Receive-Aktivität nur in einem von WorkflowServiceHost gehosteten Workflowdienst verwendet werden kann, können Send und das Send/ReceiveReply-Paar in jedem Workflow verwendet werden, der eine Methode auf einem Webdienst aufrufen muss. Wenn der Workflow mithilfe von WorkflowServiceHost gehostet wird, gilt die im vorherigen Abschnitt beschriebene Standardkorrelation. Wenn nicht, muss die Korrelation entweder explizit mithilfe der gewünschten CorrelationInitializer und CorrelationHandle konfiguriert werden, oder durch die implizite Handle-Verwaltung von CorrelationScope.
Wenn Sie "Dienstverweis hinzufügen" für einen Dienst mit bidirektionalen Operationen verwenden, werden Aktivitäten generiert, die intern eine Send/ReceiveReply Paaraktivität mit der explizit angegebenen Anforderungs-/Antwortkorrelation umschließen.