2010-09-07 20 views
1

Je vois que WinHTTP n'est pas réentrant (1, 2). WinINET est-il réentrant?est WinINET réentrant?

Nous avons un contrôle ActiveX qui fait du HTTP synchrone avec WinINET. Si le navigateur (en javascript) déclenche une requête HTTP asynchrone (ajax) puis appelle immédiatement l'opération ActiveX (même processus IE), il semble que les deux opérations sont entrelacées, peut-être réentrantes sur la même API et rompent l'état WinINET: clearInterval sur l'ajax échoue incorrectement une fois. Nous utilisons EXT pour ajax et EXT suppose que clearInterval fonctionne la première fois.

Répondre

3

Une restriction importante de l'API Windows Internet (WinINet) est que WinINet ne doit pas être utilisé dans un service (uniquement dans l'application GUI) en raison de dialogues possibles, Windows HTTP Services (WinHTTP) n'a pas la restriction. Il est conçu pour l'application de service a amélioré le soutien des demandes asynchrones. Dans mes informations WinHTTP est réentrant. Si vous avez une référence qui dit autre s'il vous plaît le poster.

L'utilisation de WinINET dans une application COM peut avoir certains effets. Dans Different Handling of Asynchronous Requests sont décrites quelques différences comment WinINet et WinHTTP demandes asynchrones et synchrones.

La dernière modification dans WinINET portait sur Windows XP and Windows Server 2003 R2. WinHTTP a quelques nouvelles fonctionnalités dans Windows Server 2008 and Windows Vista.

Si la partie de votre application n'est pas assez grande et n'utilise que HTTP/HTTPS, je vous recommande de to port it from WinINet Applications to WinHTTP. Si vous voulez ou devez rester avec WinINET, vous pouvez publier dans votre question un exemple d'utilisation de WinINet dans votre application. Probablement changer de code peut résoudre vos problèmes multi-thread.

+0

thx, digérant toujours votre réponse. J'ai ajouté des références par rapport à la réentrée WinHTTP –

+0

@Dustin Getz: À partir des liens que vous avez insérés, si vous utilisez le ** rappel de fin asynchrone ** dans WinHTTP, vous recevrez un code de retour. Si vous utilisez le ** rappel de fin asynchrone ** de WinINET, vous aurez quelques problèmes possibles décrits dans "Traitement différent des requêtes asynchrones". Je suppose que vous utilisez le rappel asynchrone, n'est-ce pas? – Oleg

+0

Merci, je ne savais pas à propos de ces restrictions. –