Procedure consigliate per l'uso di BIT

Questa sezione contiene informazioni da considerare durante la progettazione di un'applicazione che usa BITS.

Contesto utente o contesto del servizio

BITS trasferisce i file solo quando il proprietario del processo è connesso al computer (l'utente deve aver eseguito l'accesso in modo interattivo). BITS non supporta il comando RunAs . Per altri dettagli, vedere Utenti e Connessione di rete.

Se non è necessario il contesto di un utente per l'applicazione, è consigliabile scrivere un servizio in esecuzione come LocalSystem, LocalService o NetworkService. Questi account di sistema sono sempre connessi, quindi il trasferimento non è soggetto a una disconnessione dell'utente. Tuttavia, se si rappresenta un utente quando si crea il processo, si applicano le regole di accesso interattive. Per altri dettagli, vedere Account del servizio e BITS.

I processi sono persistenti

I processi rimangono nella coda finché non si chiama il metodo IBackgroundCopyJob::Complete o IBackgroundCopyJob::Cancel. I file nel processo non sono disponibili per l'utente fino a quando non si chiama Complete. In genere, si chiama Completa quando lo stato del processo è BG_JOB_STATE_TRANSFERRED e si chiama Annulla quando il processo si trova nello stato BG_JOB_STATE_TRANSIENT_ERROR o BG_JOB_STATE_ERROR e non può più apportare progressi.

Se non si chiama il metodo Complete o il metodo Cancel entro 90 giorni (criterio di gruppo JobInactivityTimeout predefinito), il servizio annulla il processo. È consigliabile chiamare sempre il metodo Complete o Cancel e non basarsi sul criterio JobInactivityTimeout per pulire i processi. I processi lasciati nella coda possono impedire agli utenti di creare altri processi se viene raggiunto il limite di criteri MaxJobsPerUser o MaxJobsPerMachine.

Quando usare la priorità in primo piano o in background

A meno che il processo non sia critico per il tempo o che l'utente sia attivamente in attesa, è consigliabile usare sempre una priorità in background. Tuttavia, in alcuni casi, è possibile passare dalla priorità in background alla priorità in primo piano, ad esempio quando il proxy o il server non supporta l'intestazione Content-Range o il software antivirus nel client rimuove la richiesta di intestazione dell'intervallo. Il passaggio alla priorità in primo piano funziona solo per i file le cui dimensioni del file sono inferiori a 2 GB. Per un esempio, vedere l'implementazione del metodo IBackgroundCopyCallback::JobError . Si noti anche che se il processo in primo piano viene interrotto a causa di una disconnessione di rete o di disconnessione dell'utente, il processo avrà esito negativo perché BITS invierà una richiesta di intervallo per tentare di riavviare il trasferimento da dove è stato interrotto.

A partire da Windows 8, è consigliabile configurare i processi di download con BITS_JOB_PROPERTY_DYNAMIC_CONTENT e BG_JOB_PRIORITY_FOREGROUND quando i server di destinazione che non soddisfano i requisiti HTTP per i download BITS. Tenere presente che ciò comporterà la necessità di riavviare il download dall'inizio, ad esempio a causa di problemi di connettività o riavvio del sistema.

Per informazioni sulle priorità disponibili e sul modo in cui BITS usa il livello di priorità per pianificare i processi, vedere BG_JOB_PRIORITY.

Errori temporanei e irreversibili

Alcuni errori sono recuperabili e alcuni non lo sono. Ad esempio, l'errore "Server is Unavailable" è un errore ripristinabile e l'errore "Accesso negato" è un errore irreversibile. BITS inserisce errori ripristinabili in uno stato di errore temporaneo e tenta di nuovo il processo dopo un intervallo specificato. Se il processo non è in grado di eseguire lo stato di avanzamento, BITS sposta il processo in uno stato di errore irreversibile. Usare i metodi IBackgroundCopyJob::SetMinimumRetryDelay e IBackgroundCopyJob::SetNoProgressTimeout per controllare il modo in cui BITS elabora gli errori temporanei.

Per i processi in primo piano, è consigliabile limitare la quantità di tempo per consentire a un processo di rimanere nello stato di errore temporaneo e provare a eseguire il ripristino. Utilizzare il metodo SetNoProgressTimeout per limitare la quantità di tempo per cui un processo rimane nello stato di errore temporaneo o per forzare il processo nello stato di errore irreversibile. Se si consente al processo di eseguire il ripristino, è consigliabile usare il metodo SetMinimumRetryDelay per impostare il ritardo minimo dei tentativi su 60 secondi o chiamare il metodo IBackgroundCopyJob::Resume per attivare nuovamente il processo.

Per altre informazioni, vedere BG_JOB_STATE, Ciclo di vita di un processo BITS e Gestione degli errori.

Misurazione dell'utilizzo della larghezza di banda di rete

BITS potrebbe usare la scheda di rete del client per stimare la larghezza di banda di rete disponibile. Poiché BITS non è in grado di misurare la larghezza di banda oltre il client, BITS può inserire il collegamento WAN. Per ridurre la congestione sul collegamento WAN, è possibile usare i criteri di gruppo MaxInternetBandwidth per limitare la quantità di larghezza di banda usata dal client. Per altre informazioni, vedere Larghezza di banda di rete e Criteri di gruppo.

Se si scrive un'applicazione che molti client useranno per scaricare i file da un determinato server, è consigliabile prendere in considerazione uno schema che sfalsa le richieste di download in modo da non sovraccaricare il server con richieste.

Impostazione delle credenziali per l'autenticazione proxy e server

Se si prevede che il proxy o il server richieda le credenziali utente, è necessario fornire le credenziali a BITS. Per specificare le credenziali, chiamare il metodo IBackgroundCopyJob2::SetCredentials. BITS supporta schemi di autenticazione Basic, Digest, Negotiate, NTLM e Passport.

Per informazioni dettagliate sull'autenticazione, vedere Autenticazione.

Specifica delle impostazioni proxy per gli account utente e gli account di servizio

Per impostazione predefinita, BITS usa le impostazioni proxy di Internet Explorer dell'utente. Per eseguire l'override delle impostazioni proxy di Internet Explorer dell'utente, chiamare il metodo IBackgroundCopyJob::SetProxy Impostazioni.

Le impostazioni proxy di Internet Explorer non si applicano agli account di sistema, pertanto il comportamento proxy predefinito (BG_JOB_PROXY_USAGE_PRECONFIG) funzionerà correttamente solo nelle distribuzioni WPAD (Web Proxy Auto-Discovery Protocol), a meno che non vengano eseguiti passaggi di configurazione aggiuntivi. Se l'applicazione è un servizio in esecuzione come LocalSystem, LocalService o NetworkService, è consigliabile configurare un token helper nei processi BITS o impostare in modo esplicito le impostazioni proxy corrette chiamando IBackgroundCopyJob::SetProxy Impostazioni con BG_JOB_PROXY_USAGE_OVERRIDE. In alternativa, è possibile usare le opzioni /Util /SetIEProxy di Bit Amministrazione.exe per impostare le impostazioni proxy di Internet Explorer per l'account di sistema LocalSystem, LocalService o NetworkService. Per informazioni dettagliate, vedere Bit Amministrazione Tool.

BITS non riconosce le impostazioni proxy impostate usando il file Proxycfg.exe.

A partire dal Aggiornamento di Windows 10 (ottobre 2018) (10,0; Build 17763), BITS usa lo stesso ordine proxy usato da WinHttp con AUTOMATIC_PROXY. BITS usa questo ordinamento più compatibile quando si specifica BG_JOB_PROXY_USAGE_PRECONFIG. BG_JOB_PROXY_USAGE_PRECONFIG è il valore predefinito per specificare il proxy HTTP.

Specifica delle impostazioni specifiche dell'utente per l'autenticazione dei proxy

Se si usa BITS in un ambiente che richiede l'autenticazione proxy durante l'esecuzione come account senza credenziali NTLM o Kerberos utilizzabili nel dominio di rete del computer, è necessario eseguire passaggi aggiuntivi per eseguire correttamente l'autenticazione usando le credenziali di un altro account utente che dispone di credenziali nel dominio. Si tratta di uno scenario tipico in cui il codice BITS è in esecuzione come servizio di sistema, ad esempio LocalService, NetworkService o LocalSystem, in quanto tali account non dispongono di credenziali NTLM o Kerberos utilizzabili.

Per informazioni dettagliate sul funzionamento dell'autenticazione in questo scenario, vedere Autenticazione.

Scalabilità

Se nella coda sono presenti più di 100 processi, le prestazioni possono iniziare a diminuire a seconda della composizione del processo. BITS usa l'impostazione dei criteri MaxJobsPerMachine per imporre un limite rigido al numero di processi nella coda. Le applicazioni devono limitare il numero di posti di lavoro a circa 10, in modo che più applicazioni abbiano meno possibilità di superare le linee guida di 100 posti di lavoro. In genere, un'applicazione con un numero elevato di processi da inviare dovrebbe prima inviare 10 processi e quindi inviarla una alla volta al termine di ogni processo.

Il numero di file nel processo deve essere limitato anche a un massimo di 10 file. Se si desidera trasferire un numero elevato di file per un processo, è consigliabile creare un file CAB contenente tutti i file.

Le intestazioni HTTP possono essere in qualsiasi caso

Gli standard HTTP hanno sempre detto che le intestazioni HTTP devono essere considerate senza distinzione tra maiuscole e minuscole (RFC 7230 sezione 3.2). Lo standard HTTP più recente, RFC 7540, va oltre e indica che il traffico HTTP/2 deve confrontare le intestazioni come senza distinzione tra maiuscole e minuscole e deve presentare intestazioni in lettere minuscole (RFC 6540, sezione 8.1.2). Anche quando il traffico viene inviato con intestazioni non minuscole, i proxy possono scegliere di forzare le intestazioni in lettere minuscole.

Evitare informazioni personali

I processi BITS, inclusi il nome visualizzato del processo e la descrizione e i nomi di file, sono visibili a tutti gli utenti con privilegi di amministratore. Possono anche essere aggiunti ai dati di telemetria di Windows. È consigliabile evitare di inserire dati sensibili(ad esempio il nome dell'utente) nei dettagli del processo.