Dela via


Metodtips vid användning av BITS

Det här avsnittet innehåller information som du bör tänka på när du utformar ett program som använder BITS.

Användarkontext eller tjänstkontext

BITS överför endast filer när jobbets ägare är inloggad på datorn (användaren måste ha loggat in interaktivt). BITS stöder inte kommandot RunAs. Mer information finns i användare och nätverksanslutningar.

Om du inte behöver en användares kontext för ditt program kan du skriva en tjänst som körs som LocalSystem, LocalService eller NetworkService i stället. Dessa systemkonton loggas alltid in, så överföringen påverkas inte av att en användare loggar ut. Men om du personifierar en användare när du skapar jobbet gäller reglerna för interaktiv inloggning. Mer information finns i tjänstekonton och BITS.

Jobb är beständiga

Jobben finns kvar i kön tills du anropar metoden IBackgroundCopyJob::Complete eller IBackgroundCopyJob::Cancel. Filerna i jobbet är inte tillgängliga för användaren förrän du anropar Slutför. Normalt anropar du Slutför när jobbets tillstånd är BG_JOB_STATE_TRANSFERREDoch du anropar Avbryt när jobbet är i BG_JOB_STATE_TRANSIENT_ERROR eller BG_JOB_STATE_ERROR tillstånd och inte längre kan göra framsteg.

Om du inte anropar metoden Slutför eller metoden Avbryt inom 90 dagar (standard JobInactivityTimeout grupppolicy) kommer tjänsten att avbryta jobbet. Du bör alltid anropa metoden Complete eller metoden Cancel och inte förlita dig på principen JobInactivityTimeout för att rensa dina jobb. Jobb som finns kvar i kön kan hindra användare från att skapa andra jobb om principgränsen MaxJobsPerUser eller MaxJobsPerMachine har nåtts.

När förgrunds- eller bakgrundsprioritet ska användas

Om inte jobbet är tidskritiskt eller om användaren aktivt väntar bör du alltid använda en bakgrundsprioritet. Det finns dock tillfällen då du kanske vill växla från bakgrundsprioritet till förgrundsprioritet, till exempel när proxyn eller servern inte stöder Content-Range-huvudet eller antivirusprogram på klienten tar bort begäran om intervallhuvud. Att växla till förgrundsprioritet fungerar bara för de filer vars filstorlek är mindre än 2 GB. Ett exempel finns i implementeringen för metoden IBackgroundCopyCallback::JobError. Observera också att om förgrundsjobbet sedan avbryts på grund av en nätverksavkoppling eller användarens utloggning misslyckas jobbet eftersom BITS skickar en intervallbegäran för att försöka starta om överföringen där den slutade.

Från och med Windows 8 bör du konfigurera nedladdningsjobb med BITS_JOB_PROPERTY_DYNAMIC_CONTENT och BG_JOB_PRIORITY_FOREGROUND när du riktar in dig på servrar som inte uppfyller HTTP-krav för BITS-nedladdningar. Tänk på att detta resulterar i att BITS måste starta om nedladdningen från början om den någonsin avbryts (till exempel på grund av anslutningsproblem eller systemomstart).

Information om tillgängliga prioriteringar och hur BITS använder prioritetsnivån för att schemalägga jobb finns i BG_JOB_PRIORITY.

Tillfälliga och allvarliga fel

Vissa fel kan återställas och andra inte. Felet "Servern är inte tillgänglig" är till exempel ett återställningsbart fel och felet "Åtkomst nekad" är ett allvarligt fel. BITS placerar återställningsbara fel i ett tillfälligt feltillstånd och försöker jobbet igen efter ett angivet intervall. Om jobbet inte kan gå vidare, flyttar BITS jobbet till ett allvarligt feltillstånd. Använd IBackgroundCopyJob::SetMinimumRetryDelay och IBackgroundCopyJob::SetNoProgressTimeout metoder för att styra hur BITS bearbetar tillfälliga fel.

För förgrundsjobb bör du begränsa hur lång tid du låter ett jobb stanna kvar i det tillfälliga feltillståndet och försöka återställa. Använd metoden SetNoProgressTimeout för att begränsa hur lång tid ett jobb förblir i det tillfälliga feltillståndet eller för att tvinga jobbet till det allvarliga feltillståndet. Om du låter jobbet försöka återställa bör du använda metoden SetMinimumRetryDelay för att ange minsta fördröjning för återförsök till 60 sekunder eller anropa metoden IBackgroundCopyJob::Återuppta för att aktivera jobbet igen.

Mer information finns i BG_JOB_STATE, livscykel för ett BITS-jobboch hanteringsfel.

Mäta användningen av nätverksbandbredd

BITS kan använda klientens nätverkskort för att uppskatta tillgänglig nätverksbandbredd. Eftersom BITS inte kan mäta bandbredden utanför klienten kan BITS överbelasta WAN-länken. För att minska överbelastningen på WAN-länken kan du använda MaxInternetBandwidth grupprincip för att begränsa mängden bandbredd som klienten använder. Mer information finns i Nätverksbandbredd och gruppolicyer.

Om du skriver ett program som många klienter använder för att ladda ned filer från en viss server bör du överväga ett schema som förskjuter nedladdningsbegäranden så att du inte överbelastar servern med begäranden.

Ange autentiseringsuppgifter för proxy- och serverautentisering

Om du förväntar dig att proxyn eller servern kräver användarautentiseringsuppgifter måste du ange autentiseringsuppgifterna för BITS. Om du vill ange autentiseringsuppgifterna anropar du metoden IBackgroundCopyJob2::SetCredentials. BITS stöder autentiseringsscheman för Basic, Digest, Negotiate, NTLM och Passport.

Mer information om autentisering finns i Authentication.

Ange proxyinställningar för användarkonton och tjänstkonton

Som standard använder BITS användarens Proxyinställningar för Internet Explorer. Om du vill åsidosätta användarens Internet Explorer-proxyinställningar anropar du metoden IBackgroundCopyJob::SetProxySettings.

Internet Explorer-proxyinställningarna gäller inte för systemkonton, så standardproxybeteendet (BG_JOB_PROXY_USAGE_PRECONFIG) fungerar bara korrekt i WPAD-distributioner (Web Proxy Auto-Discovery Protocol), såvida inte ytterligare konfigurationssteg vidtas. Om ditt program är en tjänst som körs som LocalSystem, LocalService eller NetworkService kan du överväga att konfigurera en hjälptoken på dina BITS-jobb eller uttryckligen ange rätt proxyinställningar genom att anropa IBackgroundCopyJob::SetProxySettings med BG_JOB_PROXY_USAGE_OVERRIDE. Alternativt kan du använda /Util /SetIEProxy växlar av BitsAdmin.exe för att ange Internet Explorer-proxyinställningar för systemkontot LocalSystem, LocalService eller NetworkService. Mer information finns i BitsAdmin Tool.

BITS känner inte igen de proxyinställningar som anges med hjälp av filen Proxycfg.exe.

Från och med Windows 10 Oktober 2018 Update (10.0; Build 17763), BITS använder samma proxyordning som WinHttp använder med AUTOMATIC_PROXY. BITS använder den här mer kompatibla ordningen när BG_JOB_PROXY_USAGE_PRECONFIG anges. BG_JOB_PROXY_USAGE_PRECONFIG är standardvärdet för att ange HTTP-proxyn.

Ange användarspecifika inställningar för autentisering av proxyservrar

Om du använder BITS i en miljö som kräver proxyautentisering när du kör som ett konto utan användbara NTLM- eller Kerberos-autentiseringsuppgifter i datorns nätverksdomän, måste du vidta extra åtgärder för att autentisera korrekt med hjälp av autentiseringsuppgifterna för ett annat användarkonto som har autentiseringsuppgifter på domänen. Det här är ett typiskt scenario när BITS-koden körs som en systemtjänst, till exempel LocalService, NetworkService eller LocalSystem, eftersom dessa konton inte har användbara NTLM- eller Kerberos-autentiseringsuppgifter.

Mer information om hur autentisering fungerar i det här scenariot finns i -autentisering.

Skalbarhet

Om fler än 100 jobb finns i kön kan prestandan börja minska beroende på jobbets sammansättning. BITS använder principinställningen MaxJobsPerMachine för att införa en hård gräns för antalet jobb i kön. Program bör begränsa antalet jobb till cirka 10, så att flera program har mindre chans att överskrida riktlinjen på 100 jobb. Vanligtvis lämnar ett program med ett stort antal jobb in först 10 jobb, följt av ett i taget vartefter varje jobb slutförs.

Antalet filer i jobbet bör också begränsas till högst 10 filer. Om du vill överföra ett stort antal filer för ett jobb kan du skapa en CAB-fil som innehåller alla filer i stället.

HTTP-huvuden kan i vilket fall som helst vara

HTTP-standarderna har alltid sagt att HTTP-huvuden måste behandlas som skiftlägesokänsliga (RFC 7230 avsnitt 3.2). Den senaste HTTP-standarden, RFC 7540, går längre och säger att HTTP/2-trafik måste jämföra rubrikerna utan att ta hänsyn till versalisering och måste presentera rubrikerna med små bokstäver (RFC 6540, avsnitt 8.1.2). Även när trafik skickas med rubriker som inte är i gemener kan proxyservrar mycket väl välja att tvinga omvandla dessa till gemener.

Undvika personligt identifierbar information (PII)

BITS-jobb inklusive jobbets visningsnamn och beskrivning och filnamn är synliga för alla användare med administratörsbehörighet. De kan också läggas till i Windows-telemetri. Du bör undvika att placera känsliga data (till exempel användarens eget namn) i jobbinformationen.