Ver Mensaje Individual
  #1  
Antiguo 12-09-2023
alejozd alejozd is offline
Miembro
 
Registrado: jul 2010
Posts: 16
Reputación: 0
alejozd Va por buen camino
DataSnap Rest - React

Hola a todos, estoy creando un proyecto Servidor DataSnap Rest en Delphi 10.2, he realizado el ejemplo de este servidor conectando a una base de datos Firebird 3.0
Este proyecto me crea un .exe , desde esta aplicación hay un botón para iniciar el servidor en el puerto 8080.
En este servidor DataSnap Rest expuse un método que se llama ListaProductos, al hacer la prueba funciona bien y responde en http://LocalHost:8080/datasnap/rest/...istaProductos/

Luego hice una aplicación React donde hago el consumo de ListaProductos, al correr la aplicación React, abre en chrome LocalHost:3000 y se ve la pagina html ; dentro de la pagina esta el botón "Lista de Productos", al hacer clic en este botón consume el método ListaProductos del DataSnap Rest http://LocalHost:8080/datasnap/rest/...istaProductos/

Despues compile la aplicación React para montarlo en el IIS de mi equipo. hice la prueba y la pagina web se ve en el navegador.
El problema surge ya que al hacer clic en el botón ListaProductos no trae el listado y veo en la consola que no puede acceder al método en al dirección http://LocalHost:8080/datasnap/rest/...istaProductos/
El error que se ve en la consola de google chrome es el siguiente:
Access to fetch at http://LocalHost:8080/Datasnap/rest/...ListaProductos from origin http://MyPCServer has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space private.

En el servidor DataSnap Rest tengo habilitado en el WebModuleBeforeDispatch de la siguiente manera:
Código:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.SetCustomHeader('Access-Control-Allow-Origin','*');  
 
  if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then begin 
    Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers'));        
    Handled := True;
  end;
 
  if FServerFunctionInvokerAction <> nil then
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker;
end;
Ambas aplicaciones (Servidor y Cliente) están en el mismo servidor (MyPCServer)
Lo ideal es:
  • El servidor DataSnap Rest este a la escucha de las peticiones que haga el cliente React
  • EL cliente React funcione como una pagina en el navegador y la puedan acceder en la red local

Espero haber explicado bien el escenario, de antemano gracias por cualquier ayuda!
Responder Con Cita