Partilhar via


Práticas recomendadas ao usar o BITS

Esta seção contém informações que você deve considerar ao projetar um aplicativo que usa o BITS.

Contexto do usuário ou contexto do serviço

O BITS transfere arquivos somente quando o proprietário do trabalho está conectado ao computador (o usuário deve ter feito logon interativamente). O BITS não suporta o comando RunAs. Para mais detalhes, consulte Utilizadores e Conexões de Rede.

Se você não precisar do contexto de um usuário para seu aplicativo, considere escrever um serviço em execução como LocalSystem, LocalService ou NetworkService. Essas contas do sistema estão sempre conectadas, portanto, a transferência não está sujeita a um logoff do usuário. No entanto, se representares um utilizador ao criar a tarefa, aplicam-se as regras de início de sessão interativa. Para obter mais detalhes, consulte Contas de serviço e BITS.

Os empregos são persistentes

Os trabalhos permanecem na fila até que você chame o IBackgroundCopyJob::Complete ou o método IBackgroundCopyJob::Cancel. Os ficheiros do trabalho não estarão disponíveis para o utilizador até que você execute Concluir. Normalmente, você chama Concluir quando o estado do trabalho é BG_JOB_STATE_TRANSFERREDe chama Cancelar quando o trabalho está no estado BG_JOB_STATE_TRANSIENT_ERROR ou BG_JOB_STATE_ERROR e não pode mais progredir.

Se não chamar o método Complete ou o método Cancel dentro de 90 dias (padrão JobInactivityTimeout Política de Grupo), o serviço cancelará a tarefa. Você deve sempre chamar o método Completo ou o método Cancelar, em vez de depender da política de JobInactivityTimeout para encerrar os seus trabalhos. Os trabalhos deixados na fila podem impedir que os usuários criem outros trabalhos se o limite da política MaxJobsPerUser ou MaxJobsPerMachine for atingido.

Quando usar a prioridade em primeiro plano ou em segundo plano

A menos que o trabalho seja crítico em termos de tempo ou que o usuário esteja aguardando ativamente, você sempre deve usar uma prioridade em segundo plano. No entanto, há momentos em que poderá querer alternar de prioridade em segundo plano para prioridade em primeiro plano, por exemplo, quando o proxy ou o servidor não suporta o cabeçalho Content-Range, ou quando o software antivírus no cliente remove a solicitação do cabeçalho Range. Mudar para prioridade em primeiro plano funciona apenas para os ficheiros cujo tamanho de ficheiro é inferior a 2 GB. Para obter um exemplo, consulte a implementação para o IBackgroundCopyCallback::JobError método. Observe também que, se o trabalho em primeiro plano for interrompido devido a uma desconexão de rede ou ao término de sessão do utilizador, o trabalho falhará porque o BITS enviará um pedido de intervalo para tentar reiniciar a transferência de onde parou.

A partir do Windows 8, deve-se configurar tarefas de download com BITS_JOB_PROPERTY_DYNAMIC_CONTENT e BG_JOB_PRIORITY_FOREGROUND ao direcionar servidores que não atendem aos Requisitos HTTP para Downloads do BITS. Tenha em mente que isso fará com que o BITS tenha que reiniciar o download desde o início se ele for interrompido (por exemplo, devido a problemas de conectividade ou reinicialização do sistema).

Para obter informações sobre as prioridades disponíveis e como o BITS usa o nível de prioridade para agendar trabalhos, consulte BG_JOB_PRIORITY.

Erros transitórios e fatais

Alguns erros são recuperáveis e outros não. Por exemplo, o erro "O servidor está indisponível" é um erro recuperável e o erro "Acesso negado" é um erro fatal. O BITS coloca erros recuperáveis em um estado de erro transitório e tenta o trabalho novamente após um intervalo especificado. Se o trabalho não conseguir progredir, o BITS move-o para um estado de erro fatal. Use os métodos IBackgroundCopyJob::SetMinimumRetryDelay e IBackgroundCopyJob::SetNoProgressTimeout para controlar como o BITS processa erros transientes.

Para trabalhos em primeiro plano, você deve limitar a quantidade de tempo que você deixa um trabalho permanecer no estado de erro transitório e tentar se recuperar. Use o método SetNoProgressTimeout para limitar a quantidade de tempo que um trabalho permanece no estado de erro transitório ou para forçar o trabalho para o estado de erro fatal. Se você permitir que o trabalho tente se recuperar, use o método SetMinimumRetryDelay para definir o atraso mínimo de repetição para 60 segundos ou chame o método IBackgroundCopyJob::Resume para ativar o trabalho novamente.

Para obter mais informações, consulte BG_JOB_STATE, Ciclo de vida de um trabalho do BITS, e Tratamento de erros.

Medindo o uso da largura de banda da rede

O BITS pode usar o adaptador de rede do cliente para estimar a largura de banda de rede disponível. Como o BITS não é capaz de medir a largura de banda além do cliente, o BITS pode congestionar o link WAN. Para reduzir o congestionamento no link WAN, pode-se usar a política de grupo MaxInternetBandwidth para limitar a quantidade de largura de banda utilizada pelo cliente. Para obter mais informações, consulte largura de banda de rede e políticas de grupo .

Se você estiver escrevendo um aplicativo que muitos clientes usarão para baixar arquivos de um determinado servidor, você deve considerar um esquema que escalona as solicitações de download para não sobrecarregar o servidor com solicitações.

Definindo credenciais para autenticação de proxy e servidor

Se você espera que o proxy ou servidor exija credenciais de usuário, você deve fornecer as credenciais para o BITS. Para especificar as credenciais, chame o método IBackgroundCopyJob2::SetCredentials . O BITS suporta os esquemas de autenticação Basic, Digest, Negotiate, NTLM e Passport.

Para obter detalhes sobre autenticação, consulte Authentication.

Especificando configurações de proxy para contas de usuário e contas de serviço

Por padrão, o BITS usa as configurações de proxy do Internet Explorer do usuário. Para substituir as configurações de proxy de Internet Explorer do utilizador, chame o método IBackgroundCopyJob::SetProxySettings.

As configurações de proxy do Internet Explorer não se aplicam às contas do sistema, portanto, o comportamento de proxy padrão (BG_JOB_PROXY_USAGE_PRECONFIG) só funcionará corretamente em implantações do protocolo WPAD (Web Proxy Auto-Discovery Protocol), a menos que etapas de configuração adicionais sejam executadas. Se a sua aplicação estiver a ser executada como um serviço LocalSystem, LocalService ou NetworkService, considere configurar um token auxiliar nos seus trabalhos do BITS ou definir explicitamente as definições corretas do proxy chamando IBackgroundCopyJob::SetProxySettings com BG_JOB_PROXY_USAGE_OVERRIDE. Como alternativa, você pode usar as opções /Util /SetIEProxy de BitsAdmin.exe para definir as configurações de proxy do Internet Explorer para a conta do sistema LocalSystem, LocalService ou NetworkService. Para obter detalhes, consulte BitsAdmin Tool.

O BITS não reconhece as configurações de proxy definidas usando o arquivo Proxycfg.exe.

A partir da Atualização de outubro de 2018 do Windows 10 (10.0; Build 17763), o BITS usa a mesma ordem de proxy que o WinHttp usa com o AUTOMATIC_PROXY. O BITS usa essa ordem mais compatível quando BG_JOB_PROXY_USAGE_PRECONFIG é especificado. BG_JOB_PROXY_USAGE_PRECONFIG é o valor padrão para especificar o proxy HTTP.

Especificando configurações específicas do usuário para autenticar proxies

Se você estiver usando o BITS em um ambiente que requer autenticação de proxy durante a execução como uma conta sem credenciais NTLM ou Kerberos utilizáveis no domínio de rede da máquina, deverá executar etapas adicionais para autenticar corretamente usando as credenciais de outra conta de usuário que tenha credenciais no domínio. Este é um cenário típico quando o código BITS está sendo executado como um serviço do sistema, como LocalService, NetworkService ou LocalSystem, pois essas contas não têm credenciais NTLM ou Kerberos utilizáveis.

Para obter detalhes sobre como a autenticação funciona nesse cenário, consulte Autenticação .

Escalabilidade

Se mais de 100 trabalhos estiverem na fila, o desempenho pode começar a diminuir dependendo da composição do trabalho. O BITS utiliza a definição de política MaxJobsPerMachine para impor um limite rígido ao número de trabalhos na fila. As candidaturas devem limitar o número de postos de trabalho a cerca de 10, de modo a que as candidaturas múltiplas tenham menos hipóteses de ultrapassar a orientação de 100 postos de trabalho. Normalmente, um aplicativo com um grande número de trabalhos para enviar primeiro envia 10 trabalhos e, em seguida, envia um de cada vez à medida que cada trabalho termina.

O número de arquivos no trabalho também deve ser limitado a um máximo de 10 arquivos. Se você quiser transferir um grande número de arquivos para um trabalho, considere criar um arquivo CAB que contenha todos os arquivos.

Os cabeçalhos HTTP podem ser, em qualquer caso,

Os padrões HTTP sempre disseram que os cabeçalhos HTTP devem ser tratados como insensíveis a maiúsculas e minúsculas (RFC 7230, seção 3.2). O padrão HTTP mais recente, RFC 7540, vai além e diz que o tráfego HTTP/2 deve comparar os cabeçalhos como insensíveis a maiúsculas e minúsculas e deve apresentar cabeçalhos em minúsculas (RFC 6540, seção 8.1.2). Mesmo quando o tráfego é enviado com cabeçalhos não minúsculos, os proxies podem optar por forçar os cabeçalhos para minúsculas.

Evitar informações de identificação pessoal (PII)

Os trabalhos do BITS, incluindo o nome para exibição e a descrição do trabalho, e os nomes de arquivo são visíveis para todos os usuários com privilégios de administrador. Eles também podem ser adicionados à Telemetria do Windows. Você deve evitar colocar dados confidenciais (como o próprio nome do usuário) nos detalhes do trabalho.