Mengelola Set Koneksi Jaringan (Asosiasi)

Dimulai dengan Windows 2000, run time RPC dapat mempertahankan lebih dari satu koneksi antara klien dan server. Ini memfasilitasi operasi pada transportasi yang tidak mendukung perubahan identitas klien tanpa membangun kembali koneksi, klien multithreaded, dan klien asinkron. Set koneksi antara proses klien dan titik akhir server disebut asosiasi dalam terminologi RPC. Memahami asosiasi dapat meningkatkan implementasi RPC.

Dalam skenario identitas klien tunggal, RPC membuka satu koneksi antara proses klien dan titik akhir server untuk melakukan panggilan RPC. Ketika panggilan RPC sinkron dilakukan, klien mengirim permintaan ke server pada koneksi ini, dan menerima balasan di atasnya juga. Ketika jumlah utas yang melakukan panggilan RPC dalam proses klien tumbuh, identitas keamanan klien dapat berubah. Ketika panggilan asinkron/pipa dicampur dengan panggilan sinkron pada klien, RPC mungkin memerlukan lebih dari satu koneksi jaringan. Semua koneksi dalam set dimasukkan ke dalam kumpulan koneksi yang disebut asosiasi.

Panggilan prosedur jarak jauh sinkron secara eksklusif menggunakan koneksi tertentu agar sesuai dengan standar RPC. Koneksi yang digunakan oleh panggilan RPC sinkron dianggap sibuk jika permintaan telah dikirim, tetapi respons belum diterima. Tidak ada lalu lintas lain yang diizinkan pada koneksi tersebut hingga respons diterima. Run time RPC mencoba multipleks panggilan RPC asinkron dan pipa pada koneksi yang sama. Panggilan sinkron dan asinkron/pipa tidak dapat dicampur pada koneksi yang sama, yang berarti bahwa koneksi tertentu dapat digunakan untuk panggilan RPC sinkron atau untuk panggilan RPC asinkron/pipa.

RPC secara agresif mencoba menggunakan kembali koneksi dari kumpulan. Ketika panggilan RPC baru dilakukan, RPC mencoba menemukan koneksi yang sesuai dari kumpulan, dan membuat koneksi baru hanya jika koneksi yang sesuai tidak dapat ditemukan. Agar koneksi dianggap cocok, koneksi harus:

  • Menjadi dari jenis yang sesuai (sinkron, atau asinkron/pipa).
  • Bebaslah.
  • Memiliki identitas keamanan yang sama dengan handel pengikatan tempat panggilan dilakukan. Jika pelacakan identitas dinamis digunakan, identitas handel pengikatan di-refresh dari token utas di awal panggilan. Jika pelacakan identitas statis digunakan, identitas klien yang dicap pada handel pengikatan digunakan.

Ketika panggilan selesai, setelah respons diterima, koneksi ditandai sebagai gratis dan dapat digunakan untuk panggilan RPC lainnya.

Identitas keamanan pada sambungan tidak dapat berubah. Misalnya, jika sejumlah besar panggilan ke server yang sama dilakukan di bawah identitas keamanan yang berbeda, jumlah koneksi di kumpulan utas bertambah. Asosiasi itu sendiri dihitung referensi, dan ketika semua referensi hilang, itu berhenti dan menutup semua koneksi. Setiap handel pengikatan dan setiap handel konteks memegang referensi pada asosiasi. Ketika semua ditutup, asosiasi menghilang. Pada Windows XP, asosiasi tidak selalu segera menghilang; mereka mungkin tetap untuk jangka waktu singkat (periode target adalah 20 detik, tetapi run time RPC dapat memilih untuk menunda menghancurkan asosiasi jika tidak ada utas yang tersedia untuk menjalankan tugas). Jika Anda tidak ingin asosiasi tetap hidup setelah handel konteks terakhir/handel pengikatan ditutup, gunakan opsi RPC_C_OPT_DONT_LINGER untuk memaksa RUNTIME RPC segera menutup koneksi.