Различия между XMLHTTP и ServerXMLHTTP

Я пытаюсь написать надстройку Excel, которая может получать данные из веб-службы в Excel.

Чтобы использовать его, пользователю просто нужно ввести имя функции, предоставляемое надстройкой. Я нашел две статьи, реализующие HTTP-запросы в VBA: XMLHTTP и ServerXMLHTTP.

У меня трудности с их использованием. Я не знаю, какой из них использовать. Каковы различия между XMLHTTP и ServerXMLHTTP?

4 ответа

Решение

Davuz,

И Тим, и Джей обеспечивают отличный контекст и краткие комментарии. Я просто добавлю немного и попытаюсь дать некоторый контекст.

По сути, объект XMLHTTP используется для создания запроса XMLHttpRequest, который используется для запроса данных с веб-сайта / веб-сервера / веб-службы. См. Ссылку в Википедии для получения дополнительной информации: http://en.wikipedia.org/wiki/XMLHttpRequest

Как правило, XMLHTTP обычно используется для связи с сервером в качестве клиента, например, когда вы используете приложение для отправки запроса веб-службе. Объект XMLHTTP также используется для различных ориентированных на клиента методов передачи, таких как протокол передачи файлов (FTP), URL-кэширование и другие полезные инструменты. Короче говоря, объект XMLHTTP используется для того, чтобы сделать запрос к какому-либо серверу и запросить что-то интересное для клиента, будь то доступ к серверу через FTP-соединение, ряд файлов из репозитория или веб-сервис. для обработки данных от клиента.

Напротив, ServerXMLHTTP предназначен для связи между серверами, приложениями (клиентами) и для обработки запросов от клиентов. Хотя объект ServerXMLHTTP сохраняет состояние активным - это означает, что информация, отправленная / полученная в / из пункта назначения, сохраняется для будущих транзакций данных в текущем соединении - он также не поддерживает активно некоторые функции XMLHTTP, такие как "кэширование URL-адресов, автоматическое обнаружение прокси-серверов, группирование HTTP/1.1, автономная поддержка и поддержка протоколов Gopher и FTP "для стека клиентов http, используемого объектом ServerXMLHTTP.

С технической точки зрения, объект XMLHTTP использует WinInet (Windows Internet Explorer) для своей функциональности, в то время как объект ServerXMLHTTP использует клиентский стек. WinInet dll является основой управления интернет-протоколом Windows, а dll используется для обработки HTTP, HTTPS, FTP и подобных запросов.

Напротив, когда объект ServerXMLHTTP создает новый клиентский стек http, который является сущностью отдельной "сессии" HTTP-клиента. Использование отдельного сеанса означает, что несколько экземпляров объекта ServerXMLHTTP могут быть активными в любой момент времени - в зависимости от памяти и доступности соединений сокетов.

Итак, в двух словах - в дополнение к информации из комментариев выше, объект XMLHTTP часто используется для запроса информации и ее использования каким-либо образом, обычно в качестве клиента. Точно так же полезно, но часто по-разному используется, объект ServerXMLHTTP может использоваться для запроса данных, для отправки данных или даже для передачи полученного в другое приложение другому приложению относительно эффективным способом. Это часто используется для бизнес-приложений, которым требуются ответы в реальном времени, или для предоставления данных клиентам, получающим серию запросов, возможно, с условиями, встроенными в эти запросы - и многое, многое другое.

Надеюсь, это проливает некоторый свет на различия между ними. При чтении SO / вопросов об использовании определенных фрагментов запросов типа XMLHTTP, а также более глубоких исследований MSDN и других сайтов, предоставляющих документацию по специальным материалам Internet/XMLHTTPRequest для VB, VBA и Microsoft Office, можно найти гораздо больше.

Дайте мне знать, если это поможет или у вас есть другие вопросы / мысли,

~ JOL

Объект ServerXMLHTTP использует winhttp, где в качестве XMLHTTP используется wininet.

Поскольку wininet анализирует такие вопросы, как проверка подлинности и настройка прокси, такие проблемы не будут появляться, как при использовании ServerXMLHTTP. Однако ограниченная гибкость в XMLHTTP может вынудить вас взять на себя дополнительные обязанности при использовании ServerXMLHTTP, из-за необходимости согласовывать механизмы аутентификации конечной точки сервера и пункта назначения, хотя в winhttp есть методы, помогающие в этом.

При переносе XMLHTTP с большим количеством клиентов в более настраиваемый и надежный объект и классы ServerXMLHTTP вы можете удивиться, почему вы не сделали этого так давно.

Даже не заводите меня на злополучную, а теперь уже не поддерживающую WPAD поддержку.:)

Я просто столкнулся с различием: когда веб-сервер (IIS) настроен на разрешение только аутентификации Windows, а не анонимного доступа, вызовы ServerXMLHTTP завершаются с ошибкой аутентификации, тогда как вызовы XMLHTTP - нет. Кажется, что объект XMLHTTP автоматически обрабатывает отправку учетных данных проверки подлинности Windows, когда это необходимо. Я подозреваю, что добавление NetworkCredentials к объекту ServerXMLHTTP должно быть лучшим решением, но я мог найти только базовую аутентификацию, которая явно передает открытый текст uid/pwd (очевидно, неприемлемо).

Что действительно помогло мне, так это.

После определения объекта:

Dim objHTTP As Object

Set objHTTP = createObject("MSXML2.ServerXMLHTTP")
...

Затем включите эти две строки:

' --- Disregard any Proxy Settings and go straight to the IP address

    objHTTP.SetProxy 1
Другие вопросы по тегам