TsgcWSHTTPWebBrokerBridgeServer

O TsgcWSHTTPWebBrokerBridgeServer faz uso do TIdHttpWebBrokerBridge como servidor base e é útil se você quiser usar um único servidor para conexões DataSnap, HTTP e WebSocket.

 

TsgcWSHTTPWebBrokerBridgeServer herda de TsgcWebSocketHTTPServer, então você pode consultar este servidor.

 

Siga os próximos passos para substituir TIdHttpWebBrokerBridge por TsgcWSHTTPWebBrokerBridgeServer :

 

1. Crie uma nova instância de TsgcWSHTTPWebBrokerBridgeServer.

 

2. Substitua todas as chamadas a TIdHttpWebBrokerBridge por TsgcWSHTTPWebBrokerBridgeServer.

 

3. Para tratar conexões WebSocket, basta consultar TsgcWebSocketHTTPServer.

 

Configuração

Os componentes Datasnap estão localizados apenas na pasta Source; você não os encontrará nas pastas compiladas, porque esses objetos não estão incluídos no pacote sgcWebSockets, portanto você deve criá-los em tempo de execução.

Basta adicionar os arquivos necessários ao seu projeto ou definir o caminho para a pasta Source do pacote sgcWebSockets. Arquivos necessários:

 

 

Se o projeto fizer uso de IdHTTPWebBrokerBridge, altere para sgcIdHTTPWebBrokerBridge (isto se aplica apenas à Enterprise Edition).

 

Eventos


FServer := TsgcWSHTTPWebBrokerBridgeServer.Create(Self);
FServer.OnCommandRequest := OnCommandRequestEvent;
FServer.OnCommandGet := OnCommandGetevent;
  
procedure OnCommandRequestEvent(AThread: TIdContext; ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo; var aHandled: Boolean);
begin
  if ARequestInfo.Document = '/test.html' then
    aHandled := True;
end;
 
procedure OnCommandGetevent(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo);
begin
  if ARequestInfo.Document = '/test.html' then
  begin
    AResponseInfo.ResponseNo := 200;
    AResponseInfo.ContentText := 'hello all';
  end;
end;

Load Balancer

Se o servidor estiver atrás do TsgcWebSocketLoadBalancerServer, você pode ter problemas com CORS; para evitar esses problemas, utilize o código a seguir

 


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;