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 meniru pengguna saat membuat pekerjaan, aturan masuk 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 hingga Anda memanggil Selesai. Biasanya, Anda memanggil Selesai saat status pekerjaan BG_JOB_STATE_TRANSFERRED, dan Anda memanggil Batal saat pekerjaan dalam status BG_JOB_STATE_TRANSIENT_ERROR atau BG_JOB_STATE_ERROR dan tidak dapat lagi membuat kemajuan.

Jika Anda tidak memanggil metode Lengkap atau metode Batalkan dalam waktu 90 hari (Kebijakan Grup JobInactivityTimeout default), layanan akan membatalkan pekerjaan. Anda harus selalu memanggil metode Selesai atau Batal 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 pekerjaannya penting waktu atau pengguna secara aktif 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 pekerjaan pengunduhan 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 metode IBackgroundCopyJob::SetMinimumRetryDelay dan IBackgroundCopyJob::SetNoProgressTimeout untuk mengontrol cara 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 memulihkan, Anda harus menggunakan metode SetMinimumRetryDelay untuk mengatur penundaan percobaan kembali minimum menjadi 60 detik atau memanggil metode IBackgroundCopyJob::Resume untuk mengaktifkan pekerjaan lagi.

Untuk informasi selengkapnya, lihat BG_JOB_STATE, Siklus Hidup Pekerjaan BITS, dan Penanganan 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 menyimpulkan tautan 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 klien untuk mengunduh file dari server tertentu, Anda harus mempertimbangkan skema yang mengejutkan permintaan unduhan sehingga Anda tidak membebani server dengan permintaan.

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 metode IBackgroundCopyJob2::SetCredentials. BITS mendukung skema autentikasi Dasar, Hash, 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::SetProxy Pengaturan.

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 pembantu pada pekerjaan BITS Anda, atau secara eksplisit mengatur pengaturan proksi yang benar dengan memanggil IBackgroundCopyJob::SetProxy Pengaturan dengan BG_JOB_PROXY_USAGE_OVERRIDE. Sebagai alternatif, Anda dapat menggunakan sakelar /Util /SetIEProxy dari 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 dalam hal apa pun

Standar HTTP selalu mengatakan bahwa header HTTP harus diperlakukan sebagai tidak peka huruf besar/kecil (RFC 7230 bagian 3.2). Standar HTTP terbaru, RFC 7540, melangkah lebih jauh dan mengatakan bahwa lalu lintas HTTP/2 harus membandingkan header sebagai tidak peka huruf besar/kecil dan harus menyajikan header dalam huruf kecil (RFC 6540, bagian 8.1.2). Bahkan ketika lalu lintas dikirim dengan header non-huruf kecil, proksi mungkin memilih untuk memaksa header ke huruf kecil.

Menghindari informasi pengidentifikasi pribadi (PII)

Pekerjaan BITS termasuk nama tampilan pekerjaan dan 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.