【问题标题】:is WinINET reentrant?WinINET 是可重入的吗?
【发布时间】:2010-09-07 20:21:24
【问题描述】:

我看到 WinHTTP 是不可重入的 (1,2)。 WinINET 是可重入的吗?

我们有一个 ActiveX 控件,它与 WinINET 进行同步 HTTP。如果浏览器(在 javascript 中)触发异步 http 请求(ajax)然后立即调用 ActiveX 操作(相同的 IE 进程),看起来这两个操作是交错的,可能在同一个 API 上可重入,并打破 WinINET 状态: ajax 上的 clearInterval 错误地失败了一次。我们将 EXT 用于 ajax,并且 EXT 假设 clearInterval 第一次工作。

【问题讨论】:

    标签: windows winapi wininet winhttp


    【解决方案1】:

    Windows Internet (WinINet) API 的一个重要限制是 WinINet 不应在服务中使用(仅在 GUI 应用程序中),因为可能出现对话框,Windows HTTP 服务 (WinHTTP) 没有限制。它是为服务应用程序设计的,改进了对异步请求的支持。在我的信息中,WinHTTP 是可重入的。如果您有其他说明,请发布。

    在 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 的示例。可能改代码可以解决你的多线程问题。

    【讨论】:

    • 谢谢,仍在消化您的回复。我添加了参考 wrt WinHTTP reentrancy
    • @Dustin Getz:从您插入的链接可以看出,如果在 WinHTTP 中使用 异步完成回调,则会收到可重入代码。如果您使用 WinINET 中的异步完成回调,您可能会遇到“异步请求的不同处理”中描述的一些问题。我假设你使用异步回调,不是吗?
    • 谢谢,我不知道这些限制。
    猜你喜欢
    • 2015-08-13
    • 2022-01-03
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多