HINTERNET-leírók a WinHTTP-ban
A Microsoft Windows HTTP Services (WinHTTP) leírókkal követi nyomon a HTTP protokoll használatakor szükséges beállításokat és információkat. Minden leíró egy HTTP-munkamenethez, EGY HTTP-kiszolgálóval való kapcsolathoz vagy egy adott erőforráshoz kapcsolódó információkat tart fenn. Ez a témakör a fogópontok különböző típusait, a leírók elnevezési konvencióit és azok hierarchikus szerkezetét ismerteti.
Tudnivalók a HINTERNET-leírókról
A WinHTTP által létrehozott és használt leírókat HINTERNET leíróknak nevezzük. A WinHTTP-függvények olyan HINTERNET fogópontokat adnak vissza, amelyek nem cserélhetők fel más leírókkal, így nem használhatók olyan függvényekkel, mint ReadFile vagy CloseHandle. Hasonlóképpen, más leírók nem használhatók a WinHTTP függvényekkel. Az CreateFile által visszaadott leíró például nem adható át WinHttpReadData. Ezek a HINTERNET fogópontok nem zárhatók le, amíg a leírót használó API-hívás folyamatban van. A versenyfeltételek elkerülése érdekében az alkalmazásoknak védenie kell a leírót, és meg kell akadályoznia, hogy az API-hívás folyamatban legyen.
A Microsoft Win32 Internet (WinInet) függvények HINTERNET leírókat is használnak. A WinInet-függvényekben használt fogópontok azonban nem összekapcsolhatók a WinHTTP függvényekben használt fogópontokkal. További információ a WinInetről: A WinINet.
A WinHttpCloseHandle függvény bezárja a WinHTTP HINTERNET leírókat.
Elnevezési leírók
A WinHTTP dokumentációjában az alkalmazásprogramozási felületen (API) és a mintakódban található függvények leírásai különböző típusú HINTERNET leírók létrehozását és használatát mutatják be. A különböző típusú leírók nyomon követéséhez ezeknek a fogópontoknak az elnevezése konzisztens. Az alábbi táblázat a konvenció által használt azonosítókat mutatja be a dokumentációban.
Fogópont típusa | Függvényt létrehozó leíró | Azonosító |
---|---|---|
Általános leíró | WinHttpOpen, WinHttpConnectvagy WinHttpOpenRequest | hInternet |
Munkamenet-leíró | WinHttpOpen | hSession |
Kapcsolati leíró | WinHttpConnect | hConnect |
Kérelemleíró | WinHttpOpenRequest | hRequest |
Webes szoftvercsatorna leírója | WinHttpWebSocketCompleteUpgrade | hWebSocket |
Hierarchia kezelése
A HINTERNET leírók hierarchiában vannak fenntartva. A WinHttpOpen által visszaadott leíró a HINTERNET leíró munkamenet-. Az WinHttpOpen meghívása inicializálja a WinHTTP függvényeket, és elindít egy munkamenet-környezetet, amely a munkamenet-leíró teljes élettartama alatt fenntartja a felhasználói adatokat és beállításokat. WinHttpConnect egy cél HTTP- vagy HTTPS-kiszolgálót határoz meg, és létrehoz egy kapcsolatot HINTERNET leírót. Alapértelmezés szerint a kapcsolati leíró örökli a munkamenet-leíró beállításait. A WinHttpOpenRequesthívásával megadott összes erőforráshoz hozzá van rendelve egy kérés, HINTERNET leíró.
Az alábbi ábra HINTERNET fogópontok hierarchiáját szemlélteti. A diagram minden mezője egy WinHTTP függvényt jelöl, amely egy HINTERNET fogópontot ad vissza.
-t létrehozó függvények
A leíró bezárása után az alkalmazásnak készen kell állnia arra, hogy visszahívási értesítéseket kapjon a leírón, amíg a végső WINHTTP_CALLBACK_STATUS_HANDLE_CLOSED érték vissza nem érkezik, hogy jelezze, hogy a leíró teljesen bezárult (vagy amíg az alkalmazás nem végez saját egyenértékű szinkronizálást, például nyomon követi és várja a függőben lévő aszinkron műveletek visszahívásait, és nem kísérel meg további műveleteket a leíró használatával).
A munkamenet-leíró a létrehozáshoz használt kapcsolati leíró szülője; Hasonlóképpen, a kapcsolati leíró és a szülő munkamenet-leíró neve is minden olyan kéréskezelő szülője, amelyet a kapcsolati leíró használ a létrehozáshoz.
Ha egy szülőfogópont bezárul, a rendszer közvetetten érvényteleníti azokat a gyermekeket, akik nem zárják be magukat, és az őket használó későbbi kérések a ERROR_INVALID_HANDLEhibával meghiúsulnak. A függőben lévő aszinkron kérelmekre nem lehet támaszkodni a helyes befejezéshez.
Az alábbi ábrán az WinHttpOpenRequestáltal létrehozott HINTERNET leírót használó függvények láthatók. Az árnyékolt mezők a leírókat létrehozó WinHTTP-függvényeket jelölik, az egyszerű mezők pedig azokat a függvényeket jelenítik meg, amelyek ezeket a HINTERNET fogópontokat használják. A diagram a WinHTTP-függvények szokásos meghívásának sorrendjét is megjeleníti.
-t létrehozó függvények
A leíróhierarchia magyarázata
Először létrejön egy munkamenet-leíró WinHttpOpen. WinHttpConnect a munkamenet-leírót igényli első paraméterként, és visszaad egy kapcsolati leírót egy megadott kiszolgálóhoz. A winhttpOpenRequesthozza létre a kéréskezelőt, amely a WinHttpConnectáltal létrehozott kapcsolati leírót használja. Ha az alkalmazás úgy dönt, hogy további fejléceket ad hozzá a kéréshez, vagy ha szükséges, hogy az alkalmazás hitelesítő adatokat állítson be a hitelesítéshez, WinHttpAddRequestHeaders és WinHttpSetCredentials hívható meg ezzel a kéréskezelővel. A kérést WinHttpSendRequestküldi el, amely a kéréskezelőt használja. A kérés elküldése után további adatok küldhetők a kiszolgálóra WinHttpWriteDatahasználatával, vagy az alkalmazás közvetlenül átugorhat WinHttpReceiveResponse, hogy ne küldjön további információt a kiszolgálónak. Ezen a ponton az alkalmazás céljától függően a kérelemleíróval meghívhatók WinHttpQueryHeaders, WinHttpQueryAuthSchemes, vagy lekérhetők WinHttpQueryDataAvailable és WinHttpReadData.
Webes szoftvercsatornák a leíróhierarchiában
A webes szoftvercsatorna-leírók a kapcsolati és munkamenet-leíróktól öröklődnek, és hasonló pozíciót foglal el a leíróhierarchiában, mint a kérelemleírók. Webes szoftvercsatorna-leíró létrehozásához egy kérelemleírónak kell léteznie; de a webes szoftvercsatorna-leíró létrehozása után a kérés bezárható, és a webes szoftvercsatorna fogópont továbbra is működni fog.