Bagikan melalui


Peningkatan Aliran Kustom

Transportasi berorientasi aliran seperti TCP dan Pipa yang Dinamai beroperasi pada aliran byte berkelanjutan antara klien dan server. Aliran ini diwujudkan oleh objek Stream. Dalam peningkatan aliran, klien ingin menambahkan lapisan protokol opsional ke tumpukan saluran, dan meminta ujung saluran komunikasi yang lain untuk melakukannya. Peningkatan aliran terdiri dari penggantian objek Stream asli dengan objek yang ditingkatkan versinya.

Misalnya, Anda dapat membuat aliran kompresi langsung di atas aliran transportasi. Dalam hal ini Stream transportasi asli diganti dengan yang membungkus kompresi Stream di sekitar yang asli.

Anda dapat menerapkan beberapa peningkatan aliran, masing-masing membungkus yang sebelumnya.

Cara Kerja Peningkatan Aliran

Ada empat komponen untuk proses peningkatan aliran.

  1. Inisiator aliran peningkatan memulai proses: pada waktu proses ia dapat memulai permintaan ke ujung lain sambungannya untuk meningkatkan lapisan transportasi saluran.

  2. Penerima aluran peningkatan melakukan peningkatan: pada waktu proses menerima permintaan peningkatan dari mesin lain, dan jika memungkinkan, menerima peningkatan.

  3. Penyedia peningkatan membuat Inisiator di klien dan Penerima di server.

  4. Peningkatan aliran Elemen Pengikatan ditambahkan ke pengikatan pada layanan dan klien, dan membuat penyedia pada waktu berjalan.

Perhatikan bahwa dalam kasus beberapa peningkatan, Inisiator dan Penerima merangkum mesin negara untuk menegakkan transisi peningkatan mana yang valid untuk setiap Inisiasi.

Cara Menerapkan Peningkatan Aliran

Windows Communication Foundation (WCF) menyediakan empat kelas abstract yang dapat Anda implementasikan:

Untuk menerapkan peningkatan aliran kustom, lakukan hal berikut. Prosedur ini menerapkan proses peningkatan aliran minimal pada komputer klien dan server.

  1. Buat kelas yang mengimplementasikan StreamUpgradeInitiator.

    1. Ambil alih metode InitiateUpgrade untuk mengambil aliran yang akan ditingkatkan versinya, dan kembalikan aliran yang ditingkatkan versinya. Metode ini bekerja secara serempak; ada metode analog untuk memulai pemutakhiran secara tidak sinkron.

    2. Ambil alih metode GetNextUpgrade untuk memeriksa peningkatan tambahan.

  2. Buat kelas yang mengimplementasikan StreamUpgradeAcceptor.

    1. Ambil alih metode AcceptUpgrade untuk mengambil aliran yang akan ditingkatkan versinya, dan kembalikan aliran yang ditingkatkan versinya. Metode ini bekerja secara serempak; ada metode analog untuk menerima pemutakhiran secara tidak sinkron.

    2. Ganti metode CanUpgrade untuk menentukan apakah peningkatan versi yang diminta didukung oleh akseptor peningkatan versi ini pada saat ini dalam proses peningkatan versi.

  3. Buat kelas yang mengimplementasikan StreamUpgradeProvider. Ambil alih metode CreateUpgradeAcceptor dan CreateUpgradeInitiator untuk mengembalikan instans penerima dan inisiator yang ditentukan dalam langkah 2 dan 1.

  4. Buat kelas yang mengimplementasikan StreamUpgradeBindingElement.

    1. Mengambil alih metode BuildClientStreamUpgradeProvider pada klien dan metode BuildServerStreamUpgradeProvider pada layanan.

    2. Ambil alih metode BuildChannelFactory pada klien dan metode BuildChannelListener pada layanan untuk menambahkan Elemen Pengikatan peningkatan ke BindingParameters.

  5. Tambahkan elemen pengikat pemutakhiran aliran baru ke pengikatan di server dan mesin klien.

Peningkatan Keamanan

Tambahkan peningkatan keamanan adalah versi khusus dari proses peningkatan aliran umum.

WCF sudah menyediakan dua elemen pengikatan untuk meningkatkan keamanan aliran. Konfigurasi keamanan tingkat transportasi dienkapsulasi oleh WindowsStreamSecurityBindingElement dan SslStreamSecurityBindingElement yang dapat dikonfigurasi dan ditambahkan ke pengikatan kustom. Elemen pengikatan ini memperluas kelas StreamUpgradeBindingElement yang membangun penyedia peningkatan aliran klien dan server. Elemen pengikat ini memiliki metode yang membuat kelas penyedia peningkatan aliran keamanan khusus, yang bukan public, jadi untuk kedua kasus ini, Anda hanya perlu menambahkan elemen pengikatan ke pengikatan.

Untuk skenario keamanan yang tidak dipenuhi oleh dua elemen pengikat di atas, tiga kelas abstract terkait keamanan diturunkan dari kelas dasar inisiator, akseptor, dan penyedia di atas:

  1. System.ServiceModel.Channels.StreamSecurityUpgradeInitiator

  2. System.ServiceModel.Channels.StreamSecurityUpgradeAcceptor

  3. System.ServiceModel.Channels.StreamSecurityUpgradeProvider

Proses implementasi peningkatan aliran keamanan sama seperti sebelumnya, dengan perbedaan yang akan Anda peroleh dari ketiga kelas ini. Ambil alih properti tambahan di kelas ini untuk menyediakan informasi keamanan ke runtime bahasa umum.

Beberapa Peningkatan

Untuk membuat permintaan peningkatan versi tambahan, ulangi proses di atas: buat ekstensi tambahan StreamUpgradeProvider dan elemen pengikatan. Tambahkan elemen pengikatan ke pengikatan. Elemen pengikatan tambahan diproses secara berurutan, dimulai dengan elemen pengikatan pertama yang ditambahkan ke pengikatan. Di BuildChannelFactory dan BuildChannelListener setiap penyedia peningkatan versi dapat menentukan cara melapisi dirinya sendiri pada parameter pengikatan peningkatan versi yang sudah ada sebelumnya. Ini kemudian harus mengganti parameter pengikatan pemutakhiran yang ada dengan parameter pengikatan pemutakhiran komposit yang baru.

Atau, satu penyedia peningkatan dapat mendukung beberapa peningkatan. Misalnya, Anda mungkin ingin menerapkan penyedia peningkatan aliran kustom yang mendukung keamanan dan pemadatan. Lakukan langkah-langkah berikut:

  1. Subkelas StreamSecurityUpgradeProvider untuk menulis kelas penyedia yang membuat Inisiator dan Penerima.

  2. Subkelas StreamSecurityUpgradeInitiator memastikan untuk mengambil alih metode GetNextUpgrade untuk mengembalikan jenis konten untuk aliran pemadatan dan aliran aman secara berurutan.

  3. Subkelas StreamSecurityUpgradeAcceptor yang memahami jenis konten kustom dalam metodenya CanUpgrade .

  4. Aliran akan ditingkatkan setelah setiap panggilan ke GetNextUpgrade dan CanUpgrade.

Lihat juga