TsgcWSHTTPWebBrokerBridgeServer

TsgcWSHTTPWebBrokerBridgeServer maakt gebruik van TIdHttpWebBrokerBridge als serverbasis en is handig als u één enkele server wilt gebruiken voor DataSnap-, HTTP- en WebSocket-verbindingen.

 

TsgcWSHTTPWebBrokerBridgeServer erft over van TsgcWebSocketHTTPServer, zodat u naar deze server kunt verwijzen.

 

Volg de volgende stappen om TIdHttpWebBrokerBridge te vervangen door TsgcWSHTTPWebBrokerBridgeServer:

 

1. Maak een nieuw exemplaar van TsgcWSHTTPWebBrokerBridgeServer.

 

2. Vervang alle aanroepen naar TIdHttpWebBrokerBridge door TsgcWSHTTPWebBrokerBridgeServer.

 

3. Om WebSocket-verbindingen te verwerken, raadpleeg TsgcWebSocketHTTPServer.

 

Configuratie

De Datasnap-componenten bevinden zich alleen in de map Source; u vindt ze niet in de gecompileerde mappen omdat deze objecten niet zijn opgenomen in het sgcWebSockets-pakket, dus u moet ze tijdens runtime aanmaken.

Voeg gewoon de vereiste bestanden toe aan uw project of stel uw pad in op de Source-map van het sgcWebSockets-pakket. Vereiste bestanden:

 

 

Als het project gebruikmaakt van IdHTTPWebBrokerBridge, wijzig dit dan naar sgcIdHTTPWebBrokerBridge (dit geldt alleen voor de Enterprise Edition).

 

Gebeurtenissen


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

Als de server zich achter de TsgcWebSocketLoadBalancerServer bevindt, kunt u CORS-problemen ondervinden; gebruik de volgende code om deze problemen te vermijden

 


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;