Chamar serviços web REST a partir de uma página asp clássica
-
08-06-2019 - |
Pergunta
Eu gostaria de começar mudando o nosso aplicativo de negócios camadas em um conjunto de serviços web REST.No entanto, a maioria da nossa Intranet foi construído utilizando o ASP Clássico e a maioria dos desenvolvedores, onde eu trabalho manter a programação em ASP Clássico.O ideal, portanto, para beneficiar de todas as vantagens de um único conjunto de APIs da web, ele teria que ser chamado a partir de páginas ASP Clássico.
Eu não tenho a menor idéia de como fazer isso.
Solução
Você pode usar uma combinação de JQuery com JSON chamadas para consumir o RESTO serviços do cliente
ou
se você precisa de interagir com o RESTO serviços de ASP camada, você pode usar
MSXML2.ServerXMLHTTP
como:
Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.open "GET", "Rest_URI", False
HttpReq.send
Outras dicas
@PQ
Você deve realmente usar MSXML2.ServerXMLHTTP
a partir de ASP/aplicações do lado do servidor. XMLHTTP
só deve ser usado do lado do cliente, porque ele usa WinInet que não é suportado para uso em servidor/serviço de apps.
Ver http://support.microsoft.com/kb/290761, perguntas 3, 4 e 5 e
http://support.microsoft.com/kb/238425/.
Isto é muito importante, caso contrário, você vai enfrentar o seu aplicativo web de suspensão e todos os tipos de estranho absurdo acontecendo.
Aqui estão alguns artigos que descrevem como chamar um serviço da web a partir de uma página ASP de classe:
Um número de respostas aqui apresentadas parecem cobrir como ClassicASP pode ser usado para consumir serviços da web e do RESTO chamadas.
Na minha opinião, uma solução mais arrumado, pode ser para o seu ClassicASP apenas para servir de dados no RESTO formatos.Deixe o seu browser cliente baseado no código de lidar com o 'mashup' se possível.Você deve ser capaz de fazer isso sem a incorporação de quaisquer outros componentes ASP.
Então, aqui está como eu gostaria de maquete nova e brilhante RESTO de suporte em ClassicASP:
- fornecer uma única página da web ASP que atua como uma almofada de aterragem
- A almofada de aterragem vai lidar com dois parâmetros:verbo e URL, além de um conjunto de conteúdos
- Usar algum tipo de bloqueio de opção inspecionar o URL e direcionar o verbo (e o conteúdo do formulário) para um processador relevante
- O processador será, em seguida, processar o verbo (PUT/POST/GET/DELETE), juntamente com o conteúdo do formulário, retornando um sucesso/falha de código e mais dados, conforme apropriado.
- A sua almofada de aterragem irá inspecionar o sucesso/falha no código e devolver o respectivo estado de HTTP mais quaisquer dados retornados
Você poderia se beneficiar de uma classe de suporte que decodifica/codifica os dados do formulário de/para JSON, uma vez que irá facilitar o seu implementação do lado do cliente (e potencialmente agilizar o volume de dados transmitidos).Veja a conversa aqui no Qualquer bom bibliotecas para análise de JSON em ASP Clássico?
Por fim, no lado do cliente, fornecer um método que usa um Verbo, Url e carga de dados.No curto prazo, o método irá agrupar os parâmetros e encaminhá-los para a sua almofada de aterragem.A longo prazo (uma vez que você mudar de longe o ASP Clássico) o método pode enviar os dados para o 'real' url.
Boa sorte...
Outra possível solução é escrever um .A DLL de rede que faz com que as chamadas e retorna os resultados (talvez moldar algo como RESTSharp - dê a ele uma API simples, personalizado para as suas necessidades).Em seguida, você pode registrar a DLL como uma DLL de COM e usá-lo em seu código ASP através do método CreateObject.
Eu fiz isso para coisas como a criação de assinado JWTs e a salga e o hash de senhas.Ele funciona muito bem (enquanto você trabalha como um louco para reescrever a ASP).
Tudo o que você precisa é de um cliente HTTP.Em .Net, WebRequest funciona bem.Para o ASP clássico, você vai precisar de um componente específico, como este.
Outra possibilidade é usar o WinHttp objeto COM Usando o Objeto COM WinHttpRequest.
O WinHttp foi projetado para ser utilizado a partir de código de servidor.