2010-09-07 35 views
1

我看到WinHTTP不可重入(1,2)。 WinINET是否可重入?是WinINET折返?

我們有一個與WinINET同步HTTP的ActiveX控件。如果瀏覽器(在JavaScript中)觸發一個異步http請求(ajax),然後立即調用ActiveX操作(相同的IE進程),看起來這兩個操作是交錯的,可能在相同的API上可重入並打破WinINET狀態: ajax上的clearInterval不正確地失敗一次。我們使用EXT作爲ajax,而EXT假定clearInterval首次運行。

回答

3

Windows Internet(WinINet)API的一個重要限制是由於可能的對話框,WinINet不應該用於服務(僅在GUI應用程序中),Windows HTTP服務(WinHTTP)沒有限制。它專爲服務應用程序而設計,改進了對異步請求的支持。在我的信息WinHTTP是reenterant。如果您有其他人的參考,請將其發佈。

在COM應用程序中使用WinINET可以產生一些效果。在Different Handling of Asynchronous Requests中描述了WinINet和WinHTTP異步和同步請求的一些區別。

WinINET中的最後更改爲Windows XP and Windows Server 2003 R2。 WinHTTP在Windows Server 2008 and Windows Vista中有一些新功能。

如果您的應用程序的部分不夠大,並且只使用HTTP/HTTPS,我建議您使用to port it from WinINet Applications to WinHTTP。如果你想要或者不得不留在WinINET中,你可以在你的問題中發佈一個例子,告訴你如何在你的應用程序中使用WinINet。可能更改代碼可以解決您的多線程問題。

+0

thx,仍然消化你的迴應。我添加了引用wrt WinHTTP重入 – 2010-09-08 14:49:00

+0

@Dustin Getz:從插入的鏈接後面,如果在WinHTTP中使用**異步完成回調**,則會收到reenterant代碼。如果您使用WinINET中的**異步完成回調**,則會出現「異步請求的不同處理」中描述的一些可能的問題。我假設你使用異步回調,不是嗎? – Oleg 2010-09-08 15:13:35

+0

謝謝,我不知道這些限制。 – 2010-09-20 15:27:45