Вероятно, уже слишком поздно отвечать Райану, но у других может быть такая же проблема, поэтому я опубликую это: у меня есть разработчик, который сталкивается с той же проблемой с MSXML2.XMLHTTP. Дело в том, что у меня есть образцы, которые делают это с давних времен, так что я знаю, что использовал для работы, но это не так ... может быть, недавно появившаяся ошибка? Мы полагались на автоматическое обнаружение локальной интрасети с помощью стека WinINET, и тогда этот стек был бы готов интегрировать Windows. Сайт был в списке обхода прокси, который с параметрами по умолчанию помещает его в локальную интрасеть. И действительно, когда вы переходите на сайт и переходите на вкладку «Настройки безопасности», вы видите, что локальная интрасеть подсвечена, поэтому она работает. Тем не менее MSXML2.XMLHTTP по-прежнему не хочет интегрировать Windows ... Если вы не добавляете сайт непосредственно в локальную интрасеть, используя кнопки Сайты / Дополнительно на вкладке Безопасность.
Итак, я пришел к выводу, что в стеке WinINET теперь есть какая-то ошибка, которая обрабатывает автоматически обнаруженные сайты локальной интрасети иначе, чем те, которые непосредственно добавляются в список сайтов. Самое смешное, что когда просматривает на сайте, все работает так, как ожидалось, и Windows Integrated используется автоматически (даже без непосредственного добавления на сайты): это только программный доступ через MSXML2. XMLHTTP, который не работает.
Наконец, это не то, что мы закончили, хотя: вместо этого мы использовали MSXML2.ServerXMLHTTP.6.0. Этот стек (WinHTTP), кажется, делает все правильно, однако есть одна оговорка: он не использует настройки прокси IE по умолчанию, и поэтому у вас есть несколько вариантов - использовать ProxyCfg (для XP и более ранних версий) или NETSH для Vista и позже, чтобы импортировать настройки прокси IE в стек WinHTTP. Недостатком этого является дополнительная настройка на каждом клиентском компьютере (это было полнофункциональное клиентское приложение VB). Вместо этого мы решили поместить следующее перед отправкой:
HTTP.SetProxy 2, "myproxy.mydomain.com", "* .mydomain.com"
Поскольку вы будете заходить на сайт mydomain, вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не работает. Для стека нужно сказать: «У меня есть прокси, но я обхожу его для своего домена, и, кстати, сайт, на который я собираюсь, находится в этом домене, так что это локальная интрасеть».