2010-09-07 5 views
1

Я вижу, что WinHTTP не является реентерабером (1, 2). Повторно ли WinINET?- реинтерант WinINET?

У нас есть элемент управления ActiveX, который выполняет синхронный HTTP с WinINET. Если браузер (в javascript) запускает асинхронный HTTP-запрос (ajax), а затем немедленно вызывает операцию ActiveX (тот же процесс IE), кажется, что две операции чередуются, возможно, повторно действуют в одном API и нарушают состояние WinINET: clearInterval на ajax некорректно прерывается один раз. Мы используем EXT для ajax, и EXT предполагает, что clearInterval работает в первый раз.

ответ

3

Важным ограничением API Windows Internet (WinINet) является то, что WinINet не должен использоваться в службе (только в графическом приложении) из-за возможных диалогов, Windows HTTP Services (WinHTTP) не имеет ограничений. Он предназначен для обслуживания приложений, имеет улучшенную поддержку асинхронных запросов. В моей информации WinHTTP является ретерантом. Если у вас есть ссылка, в которой говорится, что, пожалуйста, отправьте ее.

Использование WinINET в COM-приложении может иметь некоторые эффекты. В Different Handling of Asynchronous Requests описаны некоторые различия, которые асинхронно и синхронно запрашивают WinINT и 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, все еще переваривая ваш ответ. Я добавил ссылки по адресу WinHTTP reentrancy –

+0

@Dustin Getz: Из ссылок, которые вы вставили, следует, что если вы используете ** асинхронный обратный вызов завершения ** в WinHTTP, то получите код ретентата. Если вы используете ** асинхронный обратный вызов завершения ** из WinINET, у вас появятся некоторые возможные проблемы, описанные в разделе «Различная обработка асинхронных запросов». Я предположил, что вы используете асинхронный обратный вызов, не так ли? – Oleg

+0

Спасибо, я не знал об этих ограничениях. –