Megosztás a következőn keresztül:


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.