you can
- change all interfaces to envlop in all detailled stuff (like __MessageType, __InterfaceName, …)
or - use OnCustomResponseEvent, something like
TMegaDemoServerMainForm = class(TForm)
..
procedure ROServerCustomResponseEvent(
const aTransport: IROHTTPTransport; const aRequestStream,
aResponseStream: TStream; const aResponse: IROHTTPResponse;
var aHandled: Boolean);
....
procedure TMegaDemoServerMainForm.FormCreate(Sender: TObject);
...
ROIndyHTTPServer := TROIndyHTTPServer.Create(Self);
ROIndyHTTPServer.OnCustomResponseEvent := ROServerCustomResponseEvent; //added
...
procedure TMegaDemoServerMainForm.ROServerCustomResponseEvent(
const aTransport: IROHTTPTransport; const aRequestStream,
aResponseStream: TStream; const aResponse: IROHTTPResponse;
var aHandled: Boolean);
var
lMessage: IROMessage;
op: TROResponseOptions;
s: ansistring;
begin
if pos('/xxxx',aTransport.PathInfo) = 1 then begin // "xxxx" shouldn't be defined in Server.Dispathers
SetLength(s, aRequestStream.Size);
aResponseStream.Position := 0;
aRequestStream.Read(Pointer(s)^, Length(s));
s := '__MessageType=Message&__InterfaceName=MegaDemoService&'+s;
aRequestStream.Size := 0;
aRequestStream.Write(Pointer(s)^, Length(s));
lMessage:= (ROPOSTMessage as IROMessageCloneable).Clone;
MainProcessMessage(lMessage,atransport,aRequestStream,aResponseStream,op);
aHandled := True;
end;
end;
in this case, .html can pass only __MessageName:
<html><body><form method="POST" action="http://localhost:8099/xxxx">
__MessageName:<input type="text" name="__MessageName" size="45" value="GetServerTime">
<input type="submit">
</form></body></html>