Apakah .NET IWebProxy yang Dibagikan Aman di Seluruh Permintaan Bersamaan?
Bedakan kontrak konkurensi implementasi IWebProxy dari penundaan yang disebabkan oleh penemuan proxy otomatis.
IWebProxy menjelaskan kebijakan proxy. Ia tidak memberikan jaminan konkurensi yang sama kepada setiap implementasi. Sebelum membagikan satu instans di antara tugas pekerja, kenali implementasi konkretnya dan runtime tempat instans itu berada.
Antarmuka ini mengekspos kueri rute yang bergantung pada tujuan dan kredensial. Implementasi kustom dapat merujuk alamat tetap, status yang dapat berubah, atau konfigurasi otomatis. Pilihan tersebut memengaruhi keamanan dan kinerja.
Jauhkan perubahan konfigurasi dari pemrosesan permintaan
Hindari memakai satu objek proxy bersama sebagai coretan: mengubah alamat atau kredensialnya untuk pekerjaan A sementara pekerjaan B memilih rute membuat kepemilikan menjadi kabur. Konfigurasikan kebijakan sebelum menyerahkannya kepada klien. Untuk beban kerja dengan akun atau titik akhir proxy berbeda, gunakan konfigurasi klien yang dimiliki secara terpisah.
Dokumentasi WebProxy historis tidak memberikan jaminan keamanan utas untuk anggota instans. Terapkan kontrak itu pada implementasi yang sesuai. Jika sinkronisasi diperlukan, setiap pembaca dan penulis harus berpartisipasi; kunci pembungkus tidak dapat mengoordinasikan pemanggil yang memakai objek asli secara langsung.
Jeda panjang di GetProxy mungkin justru melibatkan penemuan atau evaluasi PAC. Microsoft mendokumentasikan penemuan yang memblokir untuk WinHTTP; penjelasan itu berlaku ketika klien memakai backend tersebut. Ukur pencarian rute secara terpisah dari waktu koneksi dan respons. Menyerialkan pencarian lambat hanya dapat menciptakan antrean.
Titik akhir tetap dapat menghilangkan penemuan ketika rute tetap dimaksudkan. Menangkap satu URI dari kebijakan sistem yang berubah juga membuang keputusan masa depannya. Pertahankan perbedaan itu saat memelihara kode lama; gunakan HttpClient dan konfigurasi handler yang didukungnya untuk pekerjaan HTTP baru.