Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: SOAP mit gzip-Übertragung

  Alt 2. Apr 2014, 08:47
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>
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat