TsgcWSHTTPWebBrokerBridgeServer utilise TIdHttpWebBrokerBridge comme base de serveur et est utile si vous souhaitez utiliser un seul serveur pour les connexions DataSnap, HTTP et WebSocket.
TsgcWSHTTPWebBrokerBridgeServer hérite de TsgcWebSocketHTTPServer, vous pouvez donc référencer ce serveur.
Suivez les étapes suivantes pour remplacer TIdHttpWebBrokerBridge par TsgcWSHTTPWebBrokerBridgeServer :
1. Créez une nouvelle instance de TsgcWSHTTPWebBrokerBridgeServer.
2. Remplacez tous les appels à TIdHttpWebBrokerBridge par TsgcWSHTTPWebBrokerBridgeServer.
3. Pour gérer les connexions WebSocket, référez-vous à TsgcWebSocketHTTPServer.
Les composants Datasnap ne se trouvent que dans le dossier Source ; vous ne les trouverez pas dans les dossiers compilés car ces objets ne sont pas inclus dans le package sgcWebSockets, vous devez donc les créer à l'exécution.
Ajoutez simplement les fichiers requis à votre projet ou définissez votre chemin vers le dossier Source du package sgcWebSockets. Fichiers requis :
Si le projet utilise IdHTTPWebBrokerBridge, remplacez-le par sgcIdHTTPWebBrokerBridge (applicable uniquement pour l'édition Enterprise).
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;
Si le serveur se trouve derrière le TsgcWebSocketLoadBalancerServer, vous pouvez rencontrer des problèmes avec CORS ; pour éviter ces problèmes, utilisez le code suivant
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;