Вызов веб-служб REST с классической страницы asp

Я хотел бы начать перенос бизнес-уровней нашего приложения в набор веб-сервисов REST. Однако большая часть нашей интрасети построена с использованием классического ASP, и большинство разработчиков, в которых я работаю, продолжают программировать на классическом ASP. В идеале, чтобы они могли воспользоваться преимуществами уникального набора веб-API, его нужно было бы вызывать из классических страниц ASP.

Я не имею ни малейшего представления, как это сделать.

Ответов (7)

Решение

Вы можете использовать комбинацию JQuery с вызовами JSON для использования служб REST от клиента.

или

если вам нужно взаимодействовать со службами REST из уровня ASP, вы можете использовать

MSXML2.ServerXMLHTTP

нравиться:

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.open "GET", "Rest_URI", False
HttpReq.send

Другое возможное решение - написать .NET DLL, которая выполняет вызовы и возвращает результаты (возможно, оберните что-то вроде RESTSharp - дайте ему простой API, настроенный под ваши нужды). Затем вы регистрируете DLL как COM-DLL и используете ее в своем коде ASP с помощью метода CreateObject.

Я сделал это для таких вещей, как создание подписанных JWT и паролей соления и хеширования. Он прекрасно работает (пока вы работаете как сумасшедший, чтобы переписать ASP).

@ KP

Фактически вы должны использовать MSXML2.ServerXMLHTTP из приложений на стороне сервера / ASP. XMLHTTP следует использовать только на стороне клиента, поскольку он использует WinInet, который не поддерживается для использования в серверных / служебных приложениях.

См. http://support.microsoft.com/kb/290761 , вопросы 3, 4 и 5 и

http://support.microsoft.com/kb/238425/ .

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

Ряд представленных здесь ответов, по-видимому, описывает, как ClassicASP можно использовать для использования веб-сервисов и вызовов REST.

На мой взгляд, более аккуратным решением может быть для вашего ClassicASP просто обслуживание данных в форматах REST. Если возможно, позвольте клиентскому коду вашего браузера обрабатывать «мэшап». Вы должны иметь возможность сделать это без включения каких-либо других компонентов ASP.

Итак, вот как я бы смоделировал новую блестящую поддержку REST в ClassicASP:

  1. предоставить единую веб-страницу ASP, которая действует как посадочная площадка
  2. Посадочная панель будет обрабатывать два параметра: глагол и URL, а также набор содержимого формы.
  3. Используйте какой-то блок переключателя, чтобы проверить URL-адрес и направить команду (и содержимое формы) соответствующему обработчику.
  4. Затем обработчик обработает команду (PUT / POST / GET / DELETE) вместе с содержимым формы, возвращая код успеха / неудачи и соответствующие данные.
  5. Ваша посадочная площадка проверит код успеха / неудачи и вернет соответствующий статус HTTP плюс любые возвращенные данные.

Вам будет полезен класс поддержки, который декодирует / кодирует данные формы из / в JSON, поскольку это упростит реализацию на стороне клиента (и потенциально оптимизирует объем передаваемых данных). См. Обсуждение здесь в Любые хорошие библиотеки для синтаксического анализа JSON в классическом ASP?

Наконец, на стороне клиента предоставьте метод, который принимает Verb, Url и полезную нагрузку данных. В краткосрочной перспективе метод сопоставит параметры и отправит их на вашу посадочную площадку. В более долгосрочной перспективе (после того, как вы откажетесь от классического ASP), ваш метод сможет отправлять данные на «настоящий» URL.

Удачи...

Все, что вам нужно, это HTTP-клиент. В .Net хорошо работает WebRequest. Для классического ASP вам понадобится специальный компонент, подобный этому .

Вот несколько статей, описывающих, как вызвать веб-службу со страницы ASP класса:

Другая возможность - использовать COM-объект WinHttp с помощью COM-объекта WinHttpRequest .

WinHttp был разработан для использования из серверного кода.