Ist denn das ganze Paket gezippt oder nur ein bestimmter Wert? Wenn es nur ein bestimmter Response Wert wäre, könntest Du den in ein TBytes schreiben und dann mit
Soap.EncdDecd.DecodeBase64 und IDZlib.DecompressStream umwandeln. Hier mal ein Beispiel, wo die Response ein komplettes Dataset darstellt, das gezipped und base64-codiert ist:
Delphi-Quellcode:
// WSDL-Generierte Interfacefunktion
function GetUserReports(
const Sessionid:
string): TByteDynArray;
stdcall;
function TQCClient.GetUserReports: boolean;
var
UserReportData : TByteDynArray;
begin
UserReportData := IQC.GetUserReports(FSessionID);
DynArrayToDataSet(UserReportData);
result := True;
end;
procedure TQCClient.DynArrayToDataset(ADynArray: TByteDynArray);
var
InStream : TMemoryStream;
OutStream : TStringStream;
DecodedData : TBytes;
begin
DecodedData := DecodeBase64(AnsiString(ADynArray));
InStream := TMemoryStream.Create;
try
InStream.
Write(DecodedData, length(LoginData));
InStream.Position := 0;
OutStream := TStringStream.Create;
try
DecompressStream(InStream, OutStream);
OutStream.Position := 0;
FDataSet.Active := False;
FDataSet.LoadFromStream(OutStream);
FDataSet.Active := True;
finally
OutStream.Free;
end;
finally
InStream.Free;
end;
end;
Der return-Wert sah dann z.b. so aus (return mit ... gekürzt):
Code:
<?
xml version="1.0"?>
<
SOAP-ENV:Envelope xmlns:
SOAP-ENV="http://schemas.xmlsoap.org/
soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:
SOAP-ENC="http://schemas.xmlsoap.org/
soap/encoding/">
<
SOAP-ENV:Body
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/
soap/encoding/">
<NS1:GetUserReportsResponse xmlns:NS1="urn:CDSReportPublicInterfaceIntf-ICDSReportPublicInterface">
<return xsi:type="xsd:base64Binary">ZUp6VVhHdHo0a2F6L2l0VHBDcGwxOEZZRis2Sms4SmNkamxyR3dmazNleEpwVndDRGFCWVNLd3V0...</return>
</NS1:GetUserReportsResponse>
</
SOAP-ENV:Body>
</
SOAP-ENV:Envelope>