Request-Reply korreláció

A kérés-válasz korreláció egy Receive/SendReply párral kétirányú műveletet valósít meg egy munkafolyamat-szolgáltatásban, és egy Send/ReceiveReply olyan párral, amely kétirányú műveletet hív meg egy másik webszolgáltatásban. Ha kétirányú műveletet invokál egy WCF szolgáltatásban, a szolgáltatás lehet hagyományos imperatív kódalapú Windows Communication Foundation (WCF) szolgáltatás, vagy lehet munkafolyamat-szolgáltatás. A kérelem-válasz korreláció használatához kétirányú kötést kell használni, például BasicHttpBinding. Akár kétirányú műveletet inicializál, akár implementál, a korrelációs inicializálás lépései hasonlóak, és ez a szakasz ismerteti.

Korreláció használata Two-Way műveletben a Receive/SendReply használatával

Egy Receive/SendReply pár kétirányú művelet megvalósítására szolgál egy munkafolyamat-szolgáltatásban. A futtatókörnyezet kérés-válasz korrelációt használ annak biztosítására, hogy a válasz a megfelelő hívónak legyen elküldve. Ha egy munkafolyamatot `WorkflowServiceHost` környezetben, amely a munkafolyamat-szolgáltatásokra jellemző, hostolnak, akkor elegendő az alapértelmezett korrelációs inicializálás. Ebben a forgatókönyvben egy munkafolyamat használ Receive/SendReply párokat, és nincs szükség konkrét korrelációs konfigurációra.

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.

A Request-Reply korreláció explicit inicializálása

Ha más kétirányú műveletek párhuzamosak, akkor a korrelációt explicit módon kell konfigurálni. Ez úgy végezhető el, hogy megadjuk a CorrelationHandle és RequestReplyCorrelationInitializer, vagy elhelyezzük a Receive/SendReply a CorrelationScope belsejében. Ebben a példában a kérés-válasz korreláció egy Receive/SendReply párra van konfigurálva.

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.

A korreláció explicit konfigurálása helyett egy CorrelationScope tevékenység használható. CorrelationScope implicit módon CorrelationHandle biztosítja a benne található üzenetkezelési tevékenységeket. Ebben a példában egy Receive/SendReply pár egy CorrelationScope-ben található. Nincs szükség explicit korrelációs konfigurációra.

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.

Ha további korrelációkra van szükség, akkor ezek konfigurálhatók a megfelelő üzenetkezelési tevékenységek CorrelationInitializers tulajdonsága segítségével a kívánt CorrelationInitializer típusok használatával.

Korreláció használata Two-Way műveletben a Send/ReceiveReply használatával

Bár a Receive tevékenység csak az általa WorkflowServiceHostüzemeltetett munkafolyamat-szolgáltatásban használható, Send és a Send/ReceiveReply pár bármely olyan munkafolyamatban használható, amely metódust kell meghívnia egy webszolgáltatásban. Ha a munkafolyamat üzemeltetése az WorkflowServiceHost használatával történik, akkor az előző szakaszban leírt alapértelmezett korreláció érvényes, de ha nem, akkor a korrelációt vagy explicit módon kell konfigurálni a kívánt CorrelationInitializer és CorrelationHandle, vagy az implicit leíró kezelését használva az CorrelationScope segítségével.

Ha Szolgáltatáshivatkozás hozzáadása funkciót használ kétirányú műveleteket tartalmazó szolgáltatásnál, a rendszer olyan tevékenységeket hoz létre, amelyek belsőleg magukba foglalják a Send/ReceiveReply pártevékenységet a kifejezetten megadott Kérés/Válasz korrelációval.