TsgcWSPServer_WAMP › Methods › CallProgressResult
Invia un risultato intermedio (progressivo) al chiamante mentre l'RPC è ancora in esecuzione; sono previsti ulteriori blocchi o un CallResult finale.
procedure CallProgressResult(const aCallId: String; const aResult: String = '');
| Nome | Tipo | Descrizione |
|---|---|---|
aCallId | const String | Identificatore generato dal client quando la procedura remota è stata invocata. La chiamata rimane in sospeso dopo l'invio di un chunk di avanzamento, quindi lo stesso aCallId viene riutilizzato per ogni chunk aggiuntivo e per il CallResult finale. |
aResult | const String | Payload parziale per questo chunk. È consentito qualsiasi valore stringa (numero, testo, frammento JSON, ecc.); il chiamante riceve i chunk nello stesso ordine in cui vengono inviati. |
Utilizzare questo metodo quando una singola RPC produce più di un dato (risposte in streaming, risultati paginati, calcoli a lunga esecuzione, ecc.). Ogni invocazione scrive un frame WAMP CALL_PROGRESS_RESULT al chiamante ma, a differenza di CallResult, non rimuove la chiamata dall'elenco in attesa: il server deve infine terminare lo scambio chiamando CallResult (successo) o CallError (errore) con lo stesso aCallId. Se aCallId non corrisponde a una chiamata in attesa, il metodo non fa nulla silenziosamente. Esempio: per una procedura che produce 20 elementi, inviare gli elementi da 1 a 19 con CallProgressResult e l'elemento 20 con CallResult.
procedure TForm1.sgcWSPServer_WAMP1Call(Connection: TsgcWSConnection;
const CallId, ProcURI: string; Arguments: TStringList);
var
i: Integer;
begin
if ProcURI = 'com.example.stream' then
begin
for i := 1 to 19 do
sgcWSPServer_WAMP1.CallProgressResult(CallId, IntToStr(i));
sgcWSPServer_WAMP1.CallResult(CallId, '20');
end;
end;