Вызов веб-служб REST с классической страницы asp
-
08-06-2019 - |
Вопрос
Я хотел бы начать переносить бизнес-уровни наших приложений в коллекцию веб-сервисов REST.Однако большая часть нашей интрасети построена с использованием Classic ASP, и большинство разработчиков, с которыми я работаю, продолжают программировать в Classic ASP.В идеале, чтобы они могли воспользоваться преимуществами уникального набора веб-API, его необходимо вызывать со страниц Classic ASP.
Я не имею ни малейшего представления, как это сделать.
Решение
Вы можете использовать комбинацию вызовов JQuery и JSON для использования служб REST от клиента.
или
если вам нужно взаимодействовать со службами REST на уровне ASP, вы можете использовать
MSXML2.СерверXMLHTTP
нравиться:
Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.open "GET", "Rest_URI", False
HttpReq.send
Другие советы
@КП
На самом деле вам следует использовать MSXML2.ServerXMLHTTP
из приложений ASP/сервера. XMLHTTP
следует использовать только на стороне клиента, поскольку он использует WinInet, который не поддерживается для использования в приложениях сервера/службы.
Видеть http://support.microsoft.com/kb/290761, вопросы 3, 4 и 5 и
http://support.microsoft.com/kb/238425/.
Это очень важно, иначе ваше веб-приложение зависнет и произойдет всякая странная ерунда.
Вот несколько статей, описывающих, как вызвать веб-службу со страницы класса ASP:
Ряд ответов, представленных здесь, по-видимому, описывают, как ClassicASP можно использовать для использования веб-сервисов и вызовов REST.
На мой взгляд, более разумным решением может быть использование ClassicASP просто обслуживания данных в форматах REST.Если возможно, позвольте вашему клиентскому коду на основе браузера обрабатывать «мэшап».Вы сможете сделать это без включения каких-либо других компонентов ASP.
Итак, вот как я бы смоделировал новую блестящую поддержку REST в ClassicASP:
- предоставить единую веб-страницу ASP, которая будет выступать в качестве целевой площадки
- Посадочная площадка будет обрабатывать два параметра:глагол и URL, а также набор содержимого формы
- Используйте какой-нибудь блок переключателей, проверьте URL-адрес и направьте команду (и содержимое формы) соответствующему обработчику.
- Затем обработчик обработает команду (PUT/POST/GET/DELETE) вместе с содержимым формы, возвращая код успеха/неудачи плюс соответствующие данные.
- Ваша целевая площадка проверит код успеха/неудачи и вернет соответствующий статус HTTP, а также все возвращенные данные.
Вам будет полезен класс поддержки, который декодирует/кодирует данные формы из/в JSON, поскольку это облегчит вашу реализацию на стороне клиента (и потенциально упростит объем передаваемых данных).Смотрите разговор здесь Есть ли хорошие библиотеки для анализа JSON в Classic ASP?
Наконец, на стороне клиента предоставьте метод, который принимает глагол, URL-адрес и полезную нагрузку данных.В краткосрочной перспективе метод сопоставит параметры и отправит их на вашу посадочную площадку.В долгосрочной перспективе (как только вы откажетесь от классического ASP) ваш метод сможет отправлять данные на «реальный» URL-адрес.
Удачи...
Другое возможное решение — написать .NET DLL, которая будет выполнять вызовы и возвращать результаты (возможно, обернуть что-то вроде RESTSharp — дать ей простой API, настроенный в соответствии с вашими потребностями).Затем вы регистрируете DLL как COM DLL и используете ее в своем ASP-коде с помощью метода CreateObject.
Я делал это для таких вещей, как создание подписанных JWT, а также добавление и хеширование паролей.Это работает прекрасно (пока вы работаете как сумасшедшие, чтобы переписать ASP).
Все, что вам нужно, это HTTP-клиент.В .Net WebRequest работает хорошо.Для классического ASP вам понадобится определенный компонент, например Вот этот.
Другая возможность — использовать COM-объект WinHttp. Использование COM-объекта WinHttpRequest.
WinHttp был разработан для использования из серверного кода.