Praktik Terbaik Saat Menggunakan BITS
Bagian ini berisi informasi yang harus Anda pertimbangkan saat merancang aplikasi yang menggunakan BITS.
Konteks pengguna atau konteks layanan
BITS mentransfer file hanya ketika pemilik pekerjaan masuk ke komputer (pengguna harus masuk secara interaktif). BITS tidak mendukung perintah RunAs. Untuk detail selengkapnya, lihat Pengguna dan Koneksi Jaringan.
Jika Anda tidak memerlukan konteks pengguna untuk aplikasi Anda, pertimbangkan untuk menulis layanan yang berjalan sebagai LocalSystem, LocalService, atau NetworkService sebagai gantinya. Akun sistem ini selalu masuk, sehingga transfer tidak tunduk pada pengelogan pengguna. Namun, jika Anda menyamar sebagai pengguna saat membuat tugas, aturan masuk secara interaktif berlaku. Untuk detail selengkapnya, lihat Akun Layanan dan BITS.
Pekerjaan bersifat persisten
Pekerjaan tetap dalam antrean hingga Anda memanggil metode IBackgroundCopyJob::Complete atau IBackgroundCopyJob::Cancel. File dalam pekerjaan tidak tersedia untuk pengguna sampai Anda memanggil Selesai. Biasanya, Anda memanggil Selesai ketika status pekerjaan adalah BG_JOB_STATE_TRANSFERRED, dan Anda memanggil Batalkan ketika pekerjaan tersebut berada dalam status BG_JOB_STATE_TRANSIENT_ERROR atau BG_JOB_STATE_ERROR dan tidak dapat lagi membuat kemajuan.
Jika Anda tidak memanggil metodeLengkapatau metode Batalkan dalam waktu 90 hari (default JobInactivityTimeout Kebijakan Grup), layanan membatalkan pekerjaan. Anda harus selalu memanggil Complete atau metode Cancel dan tidak bergantung pada kebijakan JobInactivityTimeout untuk membersihkan pekerjaan Anda. Pekerjaan yang tersisa dalam antrean dapat mencegah pengguna membuat pekerjaan lain jika batas kebijakan MaxJobsPerUser atau MaxJobsPerMachine tercapai.
Kapan menggunakan prioritas latar depan atau latar belakang
Kecuali pekerjaan tersebut sangat mendesak atau pengguna sedang menunggu, Anda harus selalu menggunakan prioritas latar belakang. Namun, ada kalanya Anda mungkin ingin beralih dari prioritas latar belakang ke prioritas latar depan, misalnya, ketika proksi atau server tidak mendukung header Rentang Konten, atau perangkat lunak antivirus pada klien menghapus permintaan header rentang. Beralih ke prioritas latar depan hanya berfungsi untuk file-file yang ukuran filenya kurang dari 2 GB. Misalnya, lihat implementasi untuk metode IBackgroundCopyCallback::JobError. Perhatikan juga bahwa jika pekerjaan latar depan kemudian terganggu karena jaringan terputus atau pengguna keluar, pekerjaan akan gagal karena BITS akan mengirim permintaan rentang untuk mencoba memulai ulang transfer dari tempat yang ditinggalkannya.
Dimulai dengan Windows 8, Anda harus mengonfigurasi tugas unduhan dengan BITS_JOB_PROPERTY_DYNAMIC_CONTENT dan BG_JOB_PRIORITY_FOREGROUND saat menargetkan server yang tidak memenuhi Persyaratan HTTP untuk Unduhan BITS. Perlu diingat bahwa ini akan mengakibatkan BITS harus memulai ulang unduhan dari awal jika pernah terganggu (misalnya, karena masalah konektivitas atau boot ulang sistem).
Untuk informasi tentang prioritas yang tersedia dan bagaimana BITS menggunakan tingkat prioritas untuk menjadwalkan pekerjaan, lihat BG_JOB_PRIORITY.
Kesalahan sementara dan fatal
Beberapa kesalahan dapat dipulihkan dan beberapa tidak. Misalnya, kesalahan "Server tidak tersedia" adalah kesalahan yang dapat dipulihkan, dan kesalahan "Akses Ditolak" adalah kesalahan fatal. BITS menempatkan kesalahan yang dapat dipulihkan dalam status kesalahan sementara dan mencoba pekerjaan lagi setelah interval yang ditentukan. Jika pekerjaan tidak dapat membuat kemajuan, BITS memindahkan pekerjaan ke status kesalahan fatal. Gunakan IBackgroundCopyJob::SetMinimumRetryDelay dan IBackgroundCopyJob::SetNoProgressTimeout metode untuk mengontrol bagaimana BITS memproses kesalahan sementara.
Untuk pekerjaan latar depan, Anda harus membatasi jumlah waktu Anda membiarkan pekerjaan tetap dalam status kesalahan sementara dan mencoba memulihkan. Gunakan metode SetNoProgressTimeout untuk membatasi jumlah waktu pekerjaan tetap dalam status kesalahan sementara atau untuk memaksa pekerjaan ke dalam status kesalahan fatal. Jika Anda membiarkan pekerjaan mencoba untuk pulih, Anda harus menggunakan metode SetMinimumRetryDelay untuk mengatur penundaan coba lagi minimum menjadi 60 detik atau memanggil metode IBackgroundCopyJob::Resume untuk mengaktifkan kembali pekerjaan.
Untuk informasi selengkapnya, lihat BG_JOB_STATE, Siklus Hidup Pekerjaan BITS , dan Menangani Kesalahan .
Mengukur penggunaan bandwidth jaringan
BITS mungkin menggunakan adaptor jaringan klien untuk memperkirakan bandwidth jaringan yang tersedia. Karena BITS tidak dapat mengukur bandwidth di luar klien, BITS dapat membebani link WAN. Untuk mengurangi kemacetan pada tautan WAN, Anda dapat menggunakan kebijakan grup MaxInternetBandwidth untuk membatasi jumlah bandwidth yang digunakan klien. Untuk informasi selengkapnya, lihat Bandwidth Jaringan dan Kebijakan Grup .
Jika Anda menulis aplikasi yang akan digunakan banyak pengguna untuk mengunduh file dari server tertentu, Anda harus mempertimbangkan skema yang mengatur permintaan unduhan agar server tidak kelebihan beban.
Mengatur kredensial untuk autentikasi proksi dan server
Jika Anda mengharapkan proksi atau server memerlukan kredensial pengguna, Anda harus memberikan kredensial ke BITS. Untuk menentukan kredensial, panggil metodeIBackgroundCopyJob2::SetCredentials. BITS mendukung skema autentikasi Basic, Digest, Negosiasi, NTLM, dan Paspor.
Untuk detail tentang autentikasi, lihat Autentikasi.
Menentukan pengaturan proksi untuk akun pengguna dan akun layanan
Secara default, BITS menggunakan pengaturan proksi Internet Explorer pengguna. Untuk mengambil alih pengaturan proksi Internet Explorer pengguna, panggil metode IBackgroundCopyJob::SetProxySettings.
Pengaturan proksi Internet Explorer tidak berlaku untuk akun sistem, sehingga perilaku proksi default (BG_JOB_PROXY_USAGE_PRECONFIG) hanya akan berfungsi dengan benar dalam penyebaran Web Proxy Auto-Discovery Protocol (WPAD), kecuali langkah-langkah konfigurasi tambahan diambil. Jika aplikasi Anda adalah layanan yang berjalan sebagai LocalSystem, LocalService, atau NetworkService, pertimbangkan untuk mengonfigurasi token bantu pada pekerjaan BITS Anda, atau secara eksplisit mengatur pengaturan proksi yang sesuai dengan memanggil IBackgroundCopyJob::SetProxySettings dengan BG_JOB_PROXY_USAGE_OVERRIDE. Sebagai alternatif, Anda dapat menggunakan sakelar /Util /SetIEProxy milik BitsAdmin.exe untuk mengatur pengaturan proksi Internet Explorer untuk akun sistem LocalSystem, LocalService, atau NetworkService. Untuk detailnya, lihat Alat BitsAdmin.
BITS tidak mengenali pengaturan proksi yang diatur menggunakan file Proxycfg.exe.
Dimulai dengan Pembaruan Windows 10 Oktober 2018 (10.0; Build 17763), BITS menggunakan urutan proksi yang sama dengan yang digunakan WinHttp dengan AUTOMATIC_PROXY. BITS menggunakan urutan yang lebih kompatibel ini ketika BG_JOB_PROXY_USAGE_PRECONFIG ditentukan. BG_JOB_PROXY_USAGE_PRECONFIG adalah nilai default untuk menentukan proksi HTTP.
Menentukan pengaturan khusus pengguna untuk mengautentikasi proksi
Jika Anda menggunakan BITS di lingkungan yang memerlukan autentikasi proksi saat berjalan sebagai akun tanpa kredensial NTLM atau Kerberos yang dapat digunakan di domain jaringan komputer, Anda harus mengambil langkah tambahan untuk mengautentikasi dengan benar dengan menggunakan kredensial akun pengguna lain yang memang memiliki kredensial pada domain. Ini adalah skenario umum ketika kode BITS Anda berjalan sebagai layanan sistem seperti LocalService, NetworkService, atau LocalSystem, karena akun tersebut tidak memiliki kredensial NTLM atau Kerberos yang dapat digunakan.
Untuk detail tentang cara kerja autentikasi dalam skenario ini, lihat Autentikasi .
Skalabilitas
Jika lebih dari 100 pekerjaan berada dalam antrean, performa dapat mulai berkurang tergantung pada komposisi pekerjaan. BITS menggunakan pengaturan kebijakan MaxJobsPerMachine untuk memberlakukan batas keras pada jumlah pekerjaan dalam antrean. Aplikasi harus membatasi jumlah pekerjaan mereka menjadi sekitar 10, sehingga beberapa aplikasi akan memiliki lebih sedikit kemungkinan melebihi pedoman 100 pekerjaan. Biasanya, aplikasi dengan sejumlah besar pekerjaan yang akan dikirimkan pertama-tama akan mengirimkan 10 pekerjaan dan kemudian mengirimkan satu per satu saat setiap pekerjaan selesai.
Jumlah file dalam pekerjaan juga harus dibatasi hingga maksimum 10 file. Jika Anda ingin mentransfer sejumlah besar file untuk pekerjaan, pertimbangkan untuk membuat file CAB yang berisi semua file sebagai gantinya.
Header HTTP dapat menggunakan huruf besar atau kecil.
Standar HTTP selalu menyatakan bahwa header HTTP harus diperlakukan sebagai tidak peka terhadap ukuran huruf (RFC 7230 bagian 3.2). Standar HTTP terbaru, RFC 7540, melangkah lebih jauh dan mengatakan bahwa lalu lintas HTTP/2 harus membandingkan header tanpa memperhatikan huruf besar/kecil dan harus menyajikan header dalam huruf kecil (RFC 7540, bagian 8.1.2). Bahkan ketika lalu lintas data dikirim dengan header bukan huruf kecil, proksi mungkin memilih untuk memaksa header tersebut menjadi huruf kecil.
Menghindari informasi pengidentifikasi pribadi (PII)
Pekerjaan BITS termasuk nama tampilan pekerjaan, deskripsi, dan nama file terlihat oleh semua pengguna dengan hak istimewa admin. Mereka juga dapat ditambahkan ke Windows Telemetry. Anda harus menghindari menempatkan data sensitif (seperti nama pengguna sendiri) dalam detail pekerjaan.