| Autor |
Beitrag |
Guldi
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Do 27.12.07 23:41
Hallo Zusammen
Ich versuche via SOAP auf Swissunihockey zuzugreifen, doch klappt dies nicht so wie ich will. Eifache Funktione klappen, aber die ich bräuchte, funktionieren nicht. Leider kann ich im Internet auch nichts zur Lösung finden. Könnte mir jemand einen Tipp geben?
Ich habe mit dem WDSL importer von Delphi 6 die Struktur importiert und versuchte die Funktionen zu benutzen ( www.swissunihockey.c.../webservices/league).
WDSL Datei: www.swissunihockey.c...services/league?wsdl
Quellcode:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, league1;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var lg: league; s: string; lr : LeagueResponse; tr : TableResponse;
begin lg := getLeague(false); lr := lg.testSimple(1240,'AjxsUNpBeKKfjaKSTcIwRzC2fiM='); memo1.Text := lr.ServiceImplementation + lr.Copyright; s := lg.echo('test'); memo1.Text := memo1.Text + s; tr := lg.TableLeague(1240,'AjxsUNpBeKKfjaKSTcIwRzC2fiM=',0,0,111,1); end;
end. |
Moderiert von UGrohne: Delphi-Tags hinzugefügt.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 28.12.07 00:10
Da ich mit WebServices in Delphi bisher nicht gearbeitet habe, kann ich Dir hier nicht helfen. Ich habe den WS aber mal in C# konsumiert mit folgendem Code:
C#-Quelltext 1: 2: 3: 4:
| Game game = new WpfTestApplication.ServiceReference1.Game(); LeagueClient lc = new WpfTestApplication.ServiceReference1.LeagueClient(); LeagueResponse lr = lc.testSimple(1240,"AjxsUNpBeKKfjaKSTcIwRzC2fiM="); TableResponse tr = lc.tableLeague(1240, "AjxsUNpBeKKfjaKSTcIwRzC2fiM=", 0, 0, 111, 1); |
und das funktionierte einwandfrei. Was für ein Fehler kommt überhaupt?
|
|
Guldi 
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Fr 28.12.07 10:27
Besten Dank für die schnelle Antwort
Es erscheint eine "Debugger Exception Notification" Meldung mit:
Project raised exception class EConvertError with message ''' is not a valid integer value'....
Habe auch den TCP Transfer überprüft und konnte eigentlich keine Fehler entdecken. Jede Abfrage wurde mit "HTTP/1.1 200 OK" bestätigt.
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Fr 28.12.07 10:34
Guldi hat folgendes geschrieben: | Es erscheint eine "Debugger Exception Notification" Meldung mit:
Project raised exception class EConvertError with message ''' is not a valid integer value'.... |
Erscheint die meldung nur wenn du die Anwendung in der IDE startest?
Falls ja, dann hast du auch angewählt das du bei Exceptions benachrichtigt werden willst. Und da kann die IDE nicht unterschieden ob die Exception behandelt wird oder nicht.
|
|
Guldi 
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Fr 28.12.07 10:56
Die Meldung erscheint auch wenn ich das Programm auserhalb der Programmierumgebung starte, jedoch nur in Kurzform:
'' is not a valid integer value
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 28.12.07 14:43
Hallo
verwendest du wirklich D6, wie es in deinem Profil steht? wenn ja, dann bist du meiner meinung chancenlos.
Gugg dir mal in deiner importierten pas "Tableresponse" an:
Mit d2005 und den Soappatches sieht das so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| TableEntry = class(TRemotable) private FRank: Integer; .... published property Rank: Integer read FRank write FRank; .... end;
ArrayOfTableEntry = array of TableEntry;
TableResponse = class(LeagueResponse) private FTable: ArrayOfTableEntry; public destructor Destroy; override; published property Table: ArrayOfTableEntry read FTable write FTable; end; |
Bei dir müßte da irgendwelcher anderer Quark stehen, weil die alten Delphi-versionen nicht mit dynamischen arrays klarkommen. Für >d7 gab es dazu einen soappatch den du von der codegear-seite runterladen kannst. Ob du die auch mit D6 zum laufen bekommst, weiß ich nicht. Evtl hilft es dir, in der newsgroup zu delphi-webservices etwas nachzulesen.
Mit D2005 klappt dein code, ohne Fehler.
Gruß Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Guldi 
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Mo 31.12.07 09:01
Besten Dank Frank für den Hinweis
Die generierte Stelle aus der WSDL Datei sieht exakt gleich aus bei mir. Jedoch habe ich noch die D6 version. Nebenbei habe ich auch D7 aber nur die Personal Edition.
Ich hab mich mal umgeschaut und bin auf einen anderen Weg gekommen. Habe die ganze Geschichte mal mit dem MSSOAP Toolkit versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var c: Variant; tt:string; v: variant; i:integer; begin c := CreateOleObject('MSSOAP.SoapClient30'); c.mssoapinit('http://www.swissunihockey.ch/weblounge/webservices/league?wsdl'); tt:=c.echo('hallo'); memo1.Text:=tt; v := c.testSimple(1240,'AjxsUNpBeKKfjaKSTcIwRzC2fiM='); i:=vartype(v); v := c.TableLeague(1240,'AjxsUNpBeKKfjaKSTcIwRzC2fiM=',0,0,111,1); i:=vartype(v); end; |
Soweit scheint alles ohne Fehler zu laufen. Nur habe ich keine Erfahrung mit den Variant Typen. Gibt es irgendwo ein Schlaues Tutorial? Oder kann mir jemand schnell ein Beispiel geben für die Funktion 'testSimple' wie man die Werte aus der Variablen holen kann?
Besten Dank
Guldi
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Mo 31.12.07 10:21
Guldi hat folgendes geschrieben: | | Nur habe ich keine Erfahrung mit den Variant Typen. Gibt es irgendwo ein Schlaues Tutorial? Oder kann mir jemand schnell ein Beispiel geben für die Funktion 'testSimple' wie man die Werte aus der Variablen holen kann? |
Delphi-Quelltext 1:
| memo1.Text := v.ServiceImplementation + v.Copyright; |
|
|
Guldi 
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Mo 31.12.07 10:45
Besten Dank Bernhard
Irgendetwas mache ich noch falsch. Der Aufruf führt zum Fehler "Die Methode 'ServiceImplementation' wird vom Automatisierungsobjakt nicht unterstützt".
Hat dies eventuell mit D6 bzw. D7 zu tun?
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 31.12.07 11:16
zu deiner anderen Variante kann ich dir leider nix sagen, du kannst aber nochmal folgendes probieren:
pack eine httprio kompo mit auf die form und fülle beforeexecute und afterexecute
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; var SOAPRequest: WideString); Var sl:TStrings; begin sl:=TStringList.Create; try sl.Text:=SOAPRequest; sl.SaveToFile('e:\guldi-Request.xml'); finally sl.free; end; end;
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream); Var sl:TStrings; begin sl:=TStringList.Create; try SOAPResponse.Position:=0; sl.LoadFromStream(SOAPResponse); sl.SaveToFile('e:\guldi-Response.xml'); finally sl.free; end; end; |
ändere deinen Aufruf wie folgt und übergib den Rio mit:
Delphi-Quelltext 1:
| lg := getLeague(false,'',HTTPRIO1); |
und vergleiche die beiden Dateien mit denen im Anhang, wo liegen dann die Unterschiede in den beiden xml-Dateien (der request wäre da am wichtigsten, Response muß ja das gleiche sein)?
In den beiden Ereignissen kannst du dann gewisse Dinge wieder "gradebiegen". Ich selbst habe in einem meiner Projekte das Problem, das die Schemen-angaben nicht richtig sind und muß die ändern.
bitte die Anhänge von .txt in .xml umbennen (wird sonst vom DF als Anhang geblockt)
Einloggen, um Attachments anzusehen!
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Guldi 
Hält's aus hier
Beiträge: 11
Win XP
Delphi 6 Ent.
|
Verfasst: Mo 31.12.07 12:42
Hallo Keldorn
Besten Dank für Deine Hilfe
Der Request ist exakt der selbe. Der Response unterscheidet sich in position der ID's. Weiss nicht, ab das etwas ausmacht. Hier mal der mitschnitt:
Einloggen, um Attachments anzusehen!
|
|