AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateiversand via SOAP
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiversand via SOAP

Ein Thema von hyype · begonnen am 22. Jan 2009 · letzter Beitrag vom 27. Jan 2009
Antwort Antwort
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

Dateiversand via SOAP

  Alt 22. Jan 2009, 16:22
Hallo Gemeinschaft!

Ich habe eine SOAP-Server-Anwendung geschrieben sowie 2 clients dazu, mit Hilfe derer ich Dateien als dynamisches Byte Array hin und her schicken kann.
Das hat nun schon einige Wochen fehlerfrei funktioniert, allerdings wurden nur kleine Dateien versendet. Jetzt habe ich es mal mit einer 117MB großen Datei probiert und siehe da: Ich krieg clientseitig den Fehler, dass ich zu wenig Arbeitsspeicher habe. Gut, der Rechner hier hat nur 1GB, das ist nicht viel, aber .. ich sehe auch nicht sofort, wieso es nicht reichen sollte...
Ich habe mir direkt vor der Übergabe des dyn. Byte-Arrays an die entsprechende Funktion des Servers den zur Verfügung stehenden Arbeitsspeicher ausgeben lassen: es waren 500MB.
Und sobald ich weitergeh, schnippst die Auslastung nach oben und der Client kackt ab.
Habe es dann mal an einem anderen Rechner getestet, dort waren über 850MB freier Arbeitsspeicher vorhanden, aber die waren auch nicht ausreichend.
Hier mal der Code-Ausschnitt:
Delphi-Quellcode:
cl_s_var:=GetIWebService(true); // InstanzVar der Klasse, die die vom Server über die WSDL-Datei
                                         // zur Verfügung gestellten Funktionen und Prozeduren enthält
screen.Cursor := crHourGlass;
try
  showmessage(memstat); // hier sagt er mir, es stehen 500MB Arbeitsspeicher zur Verfügung
  ref_id:=cl_s_var.filereceiver(bda64); // Auslastung schnippst nach oben, paar Sekunden später kommt der Fehler
finally
  screen.Cursor := crDefault;
end;
Ist im Endeffekt nichts sagend, der Code, oder?
Trotzdem die Frage:
Woran kann das liegen?
Vielen Dank schonmal für Eure Mithilfe!!
MfG
hyype
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Dateiversand via SOAP

  Alt 22. Jan 2009, 16:41
Grosse Datenmengen sollte/darf man nicht direkt im soap-body verschicken, weil sonst die Daten
auf der Leitung extrem aufgeblasen werden.
Ausserdem verkraften die beteiligten XML-Parser diese Datenmenge meistens nicht, weil beim Document Object Modell alles im Speicher sein muss.

Es gibt bei SOAP eine Erweiterung, dass man grosse Datenmengen als MIME Attachments anhängen kann.
http://www.w3.org/TR/SOAP-attachments
Andreas
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Dateiversand via SOAP

  Alt 22. Jan 2009, 17:32
Zitat von hyype:
Jetzt habe ich es mal mit einer 117MB großen Datei probiert und siehe da: Ich krieg clientseitig den Fehler, dass ich zu wenig Arbeitsspeicher habe.
Man könnte statt der Daten einen Link auf eine Resource auf einem HTTP oder FTP Server versenden. JMS Message Broker (wie z.B. ActiveMQ) bieten dies als eigenen Nachrichtentyp an. (Alternative Lösung, falls die Umsetzung von SOAP mit Attachments sich in Delphi nicht so einfach realisieren lässt.)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Dateiversand via SOAP

  Alt 23. Jan 2009, 09:14
Vielen Dank für eure Antworten!

@shmia:
Weißt du, wie ich SOAP mit MIME Attachements in Delphi umsetzen kann?
Z.Z. läuft die Kommunikation ja so, dass die Datei als Übergabeparameter einer vom Server zur Verfügung gestellten Funktion vom Client zum Server geschickt wird. Ich wüsste jetzt so spontan nicht, was ich daran ändern müsste/könnte.. :/

Alternativ:
Könnte ich evtl die Datei clientseitig zerstückeln und auf dem Server wieder zusammensetzen?

Und:
Was ist denn die maximale Dateigröße, die ich via SOAP bedenkenlos versenden kann?
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Dateiversand via SOAP

  Alt 26. Jan 2009, 09:50
Kann ich große Dateien evtl als SOAPAttachment verschicken?

edit:
Ich habe mir zum Test ein function in der Server-Application geschrieben, die ein SOAPAttachment empfängt und siehe, das hat super funktioniert.
Daraufhin habe ich aus den TByteDynArrays TSOAPAttachments gemacht und jetzt ist etwas sehr merkwürdiges passiert:
Nach dem Import der WSDL-Datei haben nun alle functions den Rückgabewert TSOAPAttachment. Es hat aber eigentlichi nur eine function diesen Rückgabewert, sprich: die WSDL-Datei belügt den Client ^^
Woran kann das nun wieder liegen?

edit2:
hier nochmal zur Veranschaulichung ein wenig Code:

SERVER:
Delphi-Quellcode:
function FileReceiver(strMeta:string; Datei:TSOAPAttachment; strGUID:string):integer; stdcall;
function GetUsageInfo:string; stdcall;
function GetFile(pk:integer; strGUID:string):TSOAPAttachment; stdcall;
function pause(bPaused:boolean):boolean; stdcall;
function getpaused:boolean; stdcall;
function getLog(s:string):TByteDynArray; stdcall;
CLIENT:
Delphi-Quellcode:
function FileReceiver(const strMeta: WideString; const Datei: TSOAPAttachment; const strGUID: WideString):
          TSOAPAttachment; stdcall;
function GetUsageInfo: TSOAPAttachment; stdcall;
function GetFile(const pk: Integer; const strGUID: WideString): TSOAPAttachment; stdcall;
function pause(const bPaused: Boolean): TSOAPAttachment; stdcall;
function getpaused: TSOAPAttachment; stdcall;
function getLog(const s: WideString): TSOAPAttachment; stdcall;
Habe mir eben mal die WSDL-Datei angeguckt und die sihet eigentlich gut aus, also passiert der Fehler beim Import derselben...
Auszüge:
XML-Code:
  <message name="FileReceiver0Request">
    <part name="strMeta" type="xs:string"/>
    <part name="Datei" type="xs:base64Binary"/>
    <part name="strGUID" type="xs:string"/>
  </message>
  <message name="FileReceiver0Response">
    <part name="return" type="xs:int"/>
  </message>
edit2:
Ich bin auf der Suche nach einer Lösung für mein Problem über folgenden Link gestolpert:
http://www.codinggroups.com/borland-...io-2007-a.html
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Dateiversand via SOAP

  Alt 27. Jan 2009, 13:00
macht noch jemand mit hier? ^^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz