Korelasi Request-Reply

Korelasi balasan permintaan digunakan dengan pasangan Receive/SendReply untuk menerapkan operasi dua arah dalam layanan alur kerja dan dengan Send/ReceiveReply pasangan yang memanggil operasi dua arah di layanan Web lain. Saat memanggil operasi dua arah dalam layanan WCF, layanan ini dapat menjadi layanan Windows Communication Foundation (WCF) berbasis kode imperatif tradisional atau dapat menjadi layanan alur kerja. Untuk menggunakan korelasi balasan permintaan, pengikatan dua arah harus digunakan, seperti BasicHttpBinding. Baik memanggil atau menerapkan operasi dua arah, langkah-langkah inisialisasi korelasi serupa dan tercakup dalam bagian ini.

Menggunakan Korelasi dalam Operasi Two-Way dengan Terima/BalasKirim

Pasangan Receive/SendReply digunakan untuk menerapkan operasi dua arah dalam layanan alur kerja. Runtime menggunakan korelasi balasan permintaan untuk memastikan bahwa balasan dikirim ke pemanggil yang benar. Ketika alur kerja dihosting menggunakan WorkflowServiceHost, yang merupakan kasus untuk layanan alur kerja, maka inisialisasi korelasi default sudah cukup. Dalam skenario ini, pasangan Receive/SendReply digunakan oleh alur kerja, dan tidak diperlukan konfigurasi korelasi tertentu.

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.

Melakukan Inisialisasi Korelasi Request-Reply dengan Eksplisit

Jika operasi dua arah lainnya secara paralel, maka korelasi harus dikonfigurasi secara eksplisit. Ini dapat dilakukan dengan menentukan CorrelationHandle dan RequestReplyCorrelationInitializer, atau dengan menempatkan Receive/SendReply di dalam CorrelationScope. Dalam contoh ini, korelasi balasan permintaan dikonfigurasi pada pasangan 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.

Alih-alih secara eksplisit mengonfigurasi korelasi, CorrelationScope aktivitas dapat digunakan. CorrelationScope memberikan implisit CorrelationHandle pada aktivitas olahpesan yang dikandungnya. Dalam contoh ini, pasangan Receive/SendReply terkandung di dalam CorrelationScope. Tidak diperlukan konfigurasi korelasi eksplisit.

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.

Jika korelasi tambahan diperlukan, maka dapat dikonfigurasi menggunakan properti CorrelationInitializers dari aktivitas olah pesan masing-masing dengan jenis CorrelationInitializer yang diinginkan.

Menggunakan Korelasi dalam Operasi Two-Way dengan Kirim/Terima Balasan

Meskipun Receive aktivitas hanya dapat digunakan dalam layanan alur kerja yang dihosting oleh WorkflowServiceHost, pasangan Send dan Send/ReceiveReply dapat digunakan dalam alur kerja apa pun yang harus memanggil metode pada layanan Web. Jika alur kerja dihosting menggunakan WorkflowServiceHost maka korelasi default yang dijelaskan di bagian sebelumnya berlaku, tetapi jika tidak, maka korelasi harus dikonfigurasi baik secara eksplisit menggunakan yang diinginkan CorrelationInitializer dan CorrelationHandle, atau dengan menggunakan manajemen penanganan implisit dari CorrelationScope.

Saat menggunakan Tambahkan Referensi Layanan pada layanan dengan operasi dua arah, aktivitas yang dihasilkan akan membungkus aktivitas berpasangan Send/ReceiveReply secara internal dengan korelasi permintaan/balasan yang telah ditentukan secara eksplisit.