Compartir a través de


Procedimientos recomendados al usar BITS

Esta sección contiene información que debe tener en cuenta al diseñar una aplicación que use BITS.

Contexto de usuario o contexto de servicio

BITS transfiere archivos solo cuando el propietario del trabajo ha iniciado sesión en el equipo (el usuario debe haber iniciado sesión de forma interactiva). BITS no admite el comando RunAs . Para obtener más información, consulte Usuarios y conexiones de red.

Si no necesita el contexto de un usuario para la aplicación, considere la posibilidad de escribir un servicio que se ejecute como LocalSystem, LocalService o NetworkService en su lugar. Estas cuentas del sistema siempre se inician sesión, por lo que la transferencia no está sujeta a que un usuario cierre la sesión. Sin embargo, si suplanta a un usuario al crear el trabajo, se aplican las reglas de inicio de sesión interactivas. Para obtener más información, consulte Cuentas de servicio y BITS.

Los trabajos son persistentes

Los trabajos permanecen en la cola hasta que se llama al método IBackgroundCopyJob::Complete o IBackgroundCopyJob::Cancel . Los archivos del trabajo no están disponibles para el usuario hasta que llame a Complete. Normalmente, se llama a Complete cuando se BG_JOB_STATE_TRANSFERRED el estado del trabajo y se llama a Cancelar cuando el trabajo está en el estado BG_JOB_STATE_TRANSIENT_ERROR o BG_JOB_STATE_ERROR y ya no puede avanzar.

Si no llama al método Complete o al método Cancel en un plazo de 90 días (jobInactivityTimeout predeterminado directiva de grupo), el servicio cancela el trabajo. Siempre debe llamar al método Complete o Cancel y no confiar en la directiva JobInactivityTimeout para limpiar los trabajos. Los trabajos dejados en la cola pueden impedir que los usuarios creen otros trabajos si se alcanza el límite de directivas MaxJobsPerUser o MaxJobsPerMachine.

Cuándo usar prioridad en primer plano o en segundo plano

A menos que el trabajo sea crítico o el usuario esté esperando activamente, siempre debe usar una prioridad en segundo plano. Sin embargo, hay ocasiones en las que es posible que desee cambiar de prioridad en segundo plano a prioridad en primer plano, por ejemplo, cuando el proxy o el servidor no admiten el encabezado Content-Range, o el software antivirus del cliente quita la solicitud de encabezado de intervalo. Cambiar a prioridad en primer plano solo funciona para aquellos archivos cuyo tamaño de archivo sea inferior a 2 GB. Para obtener un ejemplo, vea la implementación del método IBackgroundCopyCallback::JobError . Tenga en cuenta también que si el trabajo en primer plano se interrumpe debido a una desconexión de red o al usuario que inicia sesión, se producirá un error en el trabajo porque BITS enviará una solicitud de intervalo para intentar reiniciar la transferencia desde donde se dejó.

A partir de Windows 8, debe configurar trabajos de descarga con BITS_JOB_PROPERTY_DYNAMIC_CONTENT y BG_JOB_PRIORITY_FOREGROUND cuando el destino sea servidores que no cumplan los requisitos HTTP para descargas de BITS. Tenga en cuenta que esto dará lugar a que BITS tenga que reiniciar la descarga desde el principio si alguna vez se interrumpe (por ejemplo, debido a problemas de conectividad o reinicio del sistema).

Para obtener información sobre las prioridades disponibles y cómo BITS usa el nivel de prioridad para programar trabajos, consulte BG_JOB_PRIORITY.

Errores transitorios y irrecuperables

Algunos errores son recuperables y algunos no. Por ejemplo, el error "El servidor no está disponible" es un error recuperable y el error "Acceso denegado" es un error irrecuperable. BITS coloca errores recuperables en un estado de error transitorio e intenta de nuevo el trabajo después de un intervalo especificado. Si el trabajo no puede avanzar, BITS mueve el trabajo a un estado de error irrecuperable. Use los métodos IBackgroundCopyJob::SetMinimumRetryDelay e IBackgroundCopyJob::SetNoProgressTimeout para controlar cómo BITS procesa los errores transitorios.

En el caso de los trabajos en primer plano, debe limitar la cantidad de tiempo que permite que un trabajo permanezca en el estado de error transitorio e intente recuperarse. Use el método SetNoProgressTimeout para limitar la cantidad de tiempo que un trabajo permanece en el estado de error transitorio o para forzar el trabajo al estado de error irrecuperable. Si deja que el trabajo intente recuperarse, debe usar el método SetMinimumRetryDelay para establecer el retraso mínimo de reintento en 60 segundos o llamar al método IBackgroundCopyJob::Resume para activar el trabajo de nuevo.

Para obtener más información, vea BG_JOB_STATE, Ciclo de vida de un trabajo de BITS y Control de errores.

Medición del uso del ancho de banda de red

BITS puede usar el adaptador de red del cliente para calcular el ancho de banda de red disponible. Dado que BITS no puede medir el ancho de banda más allá del cliente, BITS puede congestar el vínculo WAN. Para reducir la congestión en el vínculo WAN, puede usar la directiva de grupo MaxInternetBandwidth para limitar la cantidad de ancho de banda que usa el cliente. Para obtener más información, consulte Directivas de grupo y ancho de banda de red.

Si está escribiendo una aplicación que muchos clientes usarán para descargar archivos de un servidor determinado, debe considerar un esquema que escalone las solicitudes de descarga para que no sobrecargue el servidor con solicitudes.

Establecimiento de credenciales para la autenticación de servidor proxy y servidor

Si espera que el proxy o el servidor requieran credenciales de usuario, debe proporcionar las credenciales a BITS. Para especificar las credenciales, llame al método IBackgroundCopyJob2::SetCredentials . BITS admite esquemas de autenticación Basic, Digest, Negotiate, NTLM y Passport.

Para más información sobre la autenticación, consulte Autenticación.

Especificación de la configuración de proxy para cuentas de usuario y cuentas de servicio

De forma predeterminada, BITS usa la configuración del proxy de Internet Explorer del usuario. Para invalidar la configuración del proxy de Internet Explorer del usuario, llame al método IBackgroundCopyJob::SetProxySettings .

La configuración del proxy de Internet Explorer no se aplica a las cuentas del sistema, por lo que el comportamiento predeterminado del proxy (BG_JOB_PROXY_USAGE_PRECONFIG) solo funcionará correctamente en las implementaciones del Protocolo de detección automática de proxy web (WPAD), a menos que se realicen pasos de configuración adicionales. Si la aplicación es un servicio que se ejecuta como LocalSystem, LocalService o NetworkService, considere la posibilidad de configurar un token auxiliar en los trabajos de BITS o establecer explícitamente la configuración de proxy correcta mediante una llamada a IBackgroundCopyJob::SetProxySettings con BG_JOB_PROXY_USAGE_OVERRIDE. Como alternativa, puedes usar los modificadores /Util /SetIEProxy de BitsAdmin.exe para establecer la configuración de proxy de Internet Explorer para la cuenta del sistema LocalSystem, LocalService o NetworkService. Para obtener más información, vea Herramienta BitsAdmin.

BITS no reconoce la configuración de proxy que se establece mediante el archivo Proxycfg.exe.

A partir del Actualización de octubre de 2018 de Windows 10 (10.0; Compilación 17763), BITS usa el mismo orden de proxy que WinHttp usa con AUTOMATIC_PROXY. BITS usa esta ordenación más compatible cuando se especifica BG_JOB_PROXY_USAGE_PRECONFIG. BG_JOB_PROXY_USAGE_PRECONFIG es el valor predeterminado para especificar el proxy HTTP.

Especificación de la configuración específica del usuario para autenticar servidores proxy

Si usa BITS en un entorno que requiere autenticación de proxy mientras se ejecuta como una cuenta sin credenciales NTLM o Kerberos utilizables en el dominio de red del equipo, debe realizar pasos adicionales para autenticarse correctamente mediante las credenciales de otra cuenta de usuario que tiene credenciales en el dominio. Se trata de un escenario típico cuando el código BITS se ejecuta como un servicio del sistema, como LocalService, NetworkService o LocalSystem, ya que esas cuentas no tienen credenciales NTLM o Kerberos utilizables.

Para más información sobre cómo funciona la autenticación en este escenario, consulte Autenticación.

Escalabilidad

Si hay más de 100 trabajos en la cola, el rendimiento puede empezar a disminuir en función de la composición del trabajo. BITS usa la configuración de directiva MaxJobsPerMachine para imponer un límite estricto en el número de trabajos de la cola. Las aplicaciones deben limitar el número de sus trabajos a aproximadamente 10, de modo que varias aplicaciones tengan menos posibilidades de superar las directrices de 100 trabajos. Normalmente, una aplicación con un gran número de trabajos que se van a enviar primero enviaría 10 trabajos y, a continuación, enviaría uno cada vez que finaliza cada trabajo.

El número de archivos del trabajo también debe limitarse a un máximo de 10 archivos. Si desea transferir un gran número de archivos para un trabajo, considere la posibilidad de crear un archivo CAB que contenga todos los archivos en su lugar.

Los encabezados HTTP pueden estar en cualquier caso

Los estándares HTTP siempre han dicho que los encabezados HTTP deben tratarse como sin distinción entre mayúsculas y minúsculas (sección 3.2 de RFC 7230). El estándar HTTP más reciente, RFC 7540, va más allá y dice que el tráfico HTTP/2 debe comparar los encabezados como sin distinción entre mayúsculas y minúsculas y debe presentar encabezados en minúsculas (RFC 6540, sección 8.1.2). Incluso cuando el tráfico se envía con encabezados que no son en minúsculas, los servidores proxy pueden optar por forzar los encabezados a minúsculas.

Evitar información de identificación personal (PII)

Los trabajos de BITS, incluidos el nombre para mostrar y la descripción y los nombres de archivo del trabajo, son visibles para todos los usuarios con privilegios de administrador. También se pueden agregar a la telemetría de Windows. Debe evitar colocar datos confidenciales (como el propio nombre del usuario) en los detalles del trabajo.