Entwickler-Ecke

Internet / Netzwerk - WebService XML basiert, mittels HTTPS


DerNetteNachbar - Di 23.12.08 13:57
Titel: WebService XML basiert, mittels HTTPS
Hallo ihr Lieben,
Ich möchte ein Request an einen Server senden und zwar mittels POST bzw. GET Methode. Die GET Methode klappt (ohne Parameter)auch ganz hervoragend, denn ich bekomme eine XML Datei zurück die ich auswerten könnte. Nur um die richtige XML Datei zu bekommen muss ich die Parameter setzen und genau das bereitet mir etwas Probleme. Die Schnittstellenbeschreibung hab ich nur komme ich da nicht wirklich weiter.
Wenn einer von euch mir helfen könnte würde ich mich sehr freuen.
Die Schnittstellenbeschreibung:

XML-Daten
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:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://ws.vdlinde.de/lieferung/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Lieferung"
  targetNamespace="http://ws.vdlinde.de/lieferung/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://ws.vdlinde.de/lieferung/">
      <xsd:complexType name="RequestPosition">
        <xsd:sequence>
          <xsd:element name="PZN" minOccurs="1"
            maxOccurs="1">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:minLength value="2"></xsd:minLength>
                <xsd:maxLength value="13"></xsd:maxLength>
                <xsd:pattern value="[0-9]{2,13}"></xsd:pattern>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:element>
          <xsd:element name="Menge" minOccurs="1"
            maxOccurs="1">

            <xsd:simpleType>
              <xsd:restriction base="xsd:int">

                <xsd:minInclusive value="1"></xsd:minInclusive>
                <xsd:maxInclusive value="9999"></xsd:maxInclusive>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:element>
          <xsd:element name="Hinweis" minOccurs="0"
            maxOccurs="1">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">


                <xsd:length value="2"></xsd:length>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:element>
          <xsd:element name="Positionsreferenz" minOccurs="0"
            maxOccurs="1">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:minLength value="1"></xsd:minLength>
                <xsd:maxLength value="7"></xsd:maxLength>
                <xsd:pattern value="[0-9]{1,7}"></xsd:pattern>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:element>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="RequestPositionArray">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="50" 
            name="RequestPositionElement" type="tns:RequestPosition" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="LieferungRequest">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Typ" minOccurs="1" maxOccurs="1">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="AUSKUNFT"/>
                  <xsd:enumeration value="AUFTRAG"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="AuftragsNr" minOccurs="0"
              maxOccurs="1">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:minLength value="1"></xsd:minLength>
                  <xsd:maxLength value="7"></xsd:maxLength>
                  <xsd:pattern value="[0-9]{1,7}"></xsd:pattern>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="AuftragsArt" minOccurs="0"
              maxOccurs="1">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:minLength value="2"></xsd:minLength>
                  <xsd:maxLength value="2"></xsd:maxLength>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="Liefertermin" minOccurs="0" maxOccurs="1">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="ZH"/>
                  <xsd:enumeration value="ZM"/>
                  <xsd:enumeration value="ZD"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="Positionen"
              type="tns:RequestPositionArray" minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:complexType name="ResponsePosition">
        <xsd:sequence>
          <xsd:element name="PZN" type="xsd:string" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="MengeGeliefert" type="xsd:int" minOccurs="1" maxOccurs="1"/>
          <xsd:element name="MengeVerbundlieferung" type="xsd:int" minOccurs="0" maxOccurs="1"/>
          <xsd:element name="MengeDisponierbar" type="xsd:int" minOccurs="0" maxOccurs="1"/>
          <xsd:element name="Defektgrund" type="xsd:string" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ResponsePositionArray">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="50" 
            name="ResponsePositionElement" type="tns:ResponsePosition" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="LieferungResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Lieferzeit"
              type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="LieferzeitVerbundlieferung"
              type="xsd:string" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="FehlercodeBearbeitung"
              type="xsd:string" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Fehlertext"
              type="xsd:string" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Positionen"
              type="tns:ResponsePositionArray" minOccurs="0" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://ws.vdlinde.de/lieferung/">
      <xsd:element name="NewOutput" type="xsd:string"></xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="LieferungRequest">
    <wsdl:part element="tns:LieferungRequest" name="parameters" />
  </wsdl:message>
  <wsdl:message name="LieferungResponse">
    <wsdl:part element="tns:LieferungResponse" name="parameters" />
  </wsdl:message>
  <wsdl:portType name="Lieferung">
    <wsdl:operation name="Lieferung">
      <wsdl:input message="tns:LieferungRequest" />
      <wsdl:output message="tns:LieferungResponse" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="LieferungSOAP" type="tns:Lieferung">
    <soap:binding style="document"
      transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Lieferung">
      <soap:operation
        soapAction="http://ws.vdlinde.de/lieferung/Lieferung" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Lieferung">
    <wsdl:port binding="tns:LieferungSOAP" name="LieferungSOAP">
      <soap:address location="http://localhost:8080/WebServices/services/Lieferung" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  PostDataStream : TStringStream;
  ParamData : TStringStream;

begin
  PostDataStream := TStringStream.Create('');
  ParamData := TStringStream.Create('');
  ParamData.WriteString('pzn=PZN-7');
  ParamData.WriteString('Menge=10');
try
//Connect
  IdHTTP1.Post('https://ws.vdlinde.de/ws/services/Lieferung?wsdl', ParamData, PostDataStream);
  //Memo1.Text := PostDataStream.Data


Danke schon mal im Vorraus.

liebe Grüsse

Nachbar


BenBE - Di 23.12.08 14:13

Ein TStringStream schreibt exakt, was du an Strings reingibst, nicht mehr und nicht weniger. Wenn Du also WriteString zwei mal aufrufst, dann kommt das einem StrConcat gleich.

Bei den GET-Parametern solltest du daher mal schauen, inwiefern das Voranstellen von & hilft, ansonsten auch mal nach jedem Parameter einen Zeilenumbruch probieren. Weiß grad nicht, wie die Indy's das bei den Parameter-Strömen haben wollen ...


DerNetteNachbar - Di 23.12.08 14:18

Das grösste Problem ist die Parameter aus der Schnittstellenbeschreibung in Delphi richtig zu verwenden, deshalb auch meine Frage wenn ich einen Parameter z.B. PZN anspreche und setze ob es dann auch wirklich so ist. Denn über XML mit dem kommunizieren ist mir nicht so verständlich.

liebe Grüsse


DerNetteNachbar - Mi 24.12.08 12:55

PUSH


matze - Mi 24.12.08 13:12

Das was du machen willst, ist ja mit einem SOAP Service zu kommunizieren.
Schau dir dazu doch einfach mal Tutorials zu SOAP an. Zum Beispiel auf http://www.dsdt.info Das ist meiner Meinung nach besser, als wenn du das selber mit den Indys zusammenstöpselst.


DerNetteNachbar - Mi 24.12.08 16:58

Könnt ihr mir bestimmte Tuts ans Herz legen?

liebe Grüsse

nachbar


matze - Do 25.12.08 14:18

Ich muss ganz ehrlich sein, dass ich selber damit noch nicht gearbeitet habe.
Aber ich habe schon viel gutes von den Tutorials auf Dsdt.info gehört. z.b: http://www.delphi-treff.de/tutorials/netzwerk-und-internet/webservice-client/


DerNetteNachbar - Do 25.12.08 21:07

Die kenn ich schon, leider haben die nicht den erhofften Effekt gebracht.


DerNetteNachbar - Sa 27.12.08 16:17

PUSH


DerNetteNachbar - Sa 03.01.09 16:07

Hallo Leute, bin etwas weitergekommen, leider nicht wo weit wie erhofft.
Das heir ist die erzeugte Unit aus der WSDL Datei

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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
// ************************************************************************ //
// Die in dieser Datei deklarierten Typen wurden aus Daten generiert, die aus 
// unten beschriebener WSDL-Datei stammen:
// WSDL     : C:\Dokumente und Einstellungen\Yewgeny\Desktop\VDL Anbindung\VDL Test\Lieferung.wsdl
// (26.12.2008 13:36:11 - 1.33.2.5)
// ************************************************************************ //

unit Lieferung1;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns,vdlconst;

type

  // ************************************************************************ //
  // Die folgenden Typen, auf die im WSDL-Dokument Bezug genommen wird, sind in dieser Datei
  // nicht repräsentiert. Sie sind entweder Aliase(@) anderer repräsentierter Typen oder auf sie wurde Bezug genommen,
  // aber in diesem Dokument nicht deklariert (!). Die Typen aus letzterer Kategorie
  // sind normalerweise mit vordefinierten/bekannten XML- oder Borland-Typen verbunden; sie könnten aber auch ein Anzeichen 
  // für ein falsches WSDL-Dokument sein, das einen Schema-Typ nicht deklariert oder importiert..
  // ************************************************************************ //
  // !:AuftragsNr      - "http://ws.vdlinde.de/lieferung/"
  // !:AuftragsArt     - "http://ws.vdlinde.de/lieferung/"
  // !:PZN             - "http://ws.vdlinde.de/lieferung/"
  // !:Menge           - "http://ws.vdlinde.de/lieferung/"
  // !:Hinweis         - "http://ws.vdlinde.de/lieferung/"
  // !:Positionsreferenz - "http://ws.vdlinde.de/lieferung/"
  // !:string          - "http://www.w3.org/2001/XMLSchema"
  // !:int             - "http://www.w3.org/2001/XMLSchema"

  RequestPosition      = class;                 { "http://ws.vdlinde.de/lieferung/" }
  RequestPositionArray = class;                 { "http://ws.vdlinde.de/lieferung/"[A] }
  ResponsePosition     = class;                 { "http://ws.vdlinde.de/lieferung/" }
  ResponsePositionArray = class;                { "http://ws.vdlinde.de/lieferung/"[A] }

  { "http://ws.vdlinde.de/lieferung/" }
  //Typ = (AUSKUNFT, AUFTRAG);

  { "http://ws.vdlinde.de/lieferung/" }
  Liefertermin = (ZH, ZM, ZD);



  // ************************************************************************ //
  // Namespace : http://ws.vdlinde.de/lieferung/
  // ************************************************************************ //
  RequestPosition = class(TRemotable)
  private
    FPZN: PZN;
    FMenge: Menge;
    FHinweis: Hinweis;
    FPositionsreferenz: Positionsreferenz;
  published
    property PZN: PZN read FPZN write FPZN;
    property Menge: Menge read FMenge write FMenge;
    property Hinweis: Hinweis read FHinweis write FHinweis;
    property Positionsreferenz: Positionsreferenz read FPositionsreferenz write FPositionsreferenz;
  end;

  RequestPositionElement = array of RequestPosition;   { "http://ws.vdlinde.de/lieferung/" }


  // ************************************************************************ //
  // Namespace : http://ws.vdlinde.de/lieferung/
  // Serializtn: [xoInlineArrays]
  // ************************************************************************ //
  RequestPositionArray = class(TRemotable)
  private
    FRequestPositionElement: RequestPositionElement;
  public
    constructor Create; override;
    destructor Destroy; override;
    function   GetRequestPositionArray(Index: Integer): RequestPosition;
    function   GetRequestPositionArrayLength: Integer;
    property   RequestPositionArray[Index: Integer]: RequestPosition read GetRequestPositionArray; default;
    property   Len: Integer read GetRequestPositionArrayLength;
  published
    property RequestPositionElement: RequestPositionElement read FRequestPositionElement write FRequestPositionElement;
  end;



  // ************************************************************************ //
  // Namespace : http://ws.vdlinde.de/lieferung/
  // ************************************************************************ //
  ResponsePosition = class(TRemotable)
  private
    FPZN: WideString;
    FMengeGeliefert: Integer;
    FMengeVerbundlieferung: Integer;
    FMengeDisponierbar: Integer;
    FDefektgrund: WideString;
  published
    property PZN: WideString read FPZN write FPZN;
    property MengeGeliefert: Integer read FMengeGeliefert write FMengeGeliefert;
    property MengeVerbundlieferung: Integer read FMengeVerbundlieferung write FMengeVerbundlieferung;
    property MengeDisponierbar: Integer read FMengeDisponierbar write FMengeDisponierbar;
    property Defektgrund: WideString read FDefektgrund write FDefektgrund;
  end;

  ResponsePositionElement = array of ResponsePosition;   { "http://ws.vdlinde.de/lieferung/" }


  // ************************************************************************ //
  // Namespace : http://ws.vdlinde.de/lieferung/
  // Serializtn: [xoInlineArrays]
  // ************************************************************************ //
  ResponsePositionArray = class(TRemotable)
  private
    FResponsePositionElement: ResponsePositionElement;
  public
    constructor Create; override;
    destructor Destroy; override;
    function   GetResponsePositionArray(Index: Integer): ResponsePosition;
    function   GetResponsePositionArrayLength: Integer;
    property   ResponsePositionArray[Index: Integer]: ResponsePosition read GetResponsePositionArray; default;
    property   Len: Integer read GetResponsePositionArrayLength;
  published
    property ResponsePositionElement: ResponsePositionElement read FResponsePositionElement write FResponsePositionElement;
  end;


  // ************************************************************************ //
  // Namespace : http://ws.vdlinde.de/lieferung/
  // soapAction: https://ws.vdlinde.de/lieferung/Lieferung
  // Transport : http://schemas.xmlsoap.org/soap/http
  // Stil     : document
  // Bindung   : LieferungSOAP
  // Service   : Lieferung
  // Port      : LieferungSOAP
  // URL       : https://ws.vdlinde.de/ws/services/Lieferung
  // ************************************************************************ //
  Lieferung = interface(IInvokable)
  ['{7C862588-7037-A920-972F-D78AD6C9A026}']
    procedure Lieferung(const Typ: Typ; const AuftragsNr: AuftragsNr; const AuftragsArt: AuftragsArt; const Liefertermin: Liefertermin; const Positionen: RequestPositionArray; out Lieferzeit: WideString; out LieferzeitVerbundlieferung: WideString; out FehlercodeBearbeitung: WideString; out Fehlertext: WideString; out Positionen1: ResponsePositionArray); stdcall;
  end;

function GetLieferung(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): Lieferung;


implementation

function GetLieferung(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): Lieferung;
const
  defWSDL = 'C:\Dokumente und Einstellungen\Yewgeny\Desktop\WSDL\VDL Schnittstelle\VDL Test\Lieferung.wsdl';
  defURL  = 'https://ws.vdlinde.de/ws/services/Lieferung';
  defSvc  = 'Lieferung';
  defPrt  = 'LieferungSOAP';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = ''then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as Lieferung);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = niland (HTTPRIO = nilthen
      RIO.Free;
  end;
end;


constructor RequestPositionArray.Create;
begin
  inherited Create;
  FSerializationOptions := [xoInlineArrays];
end;

destructor RequestPositionArray.Destroy;
var
  I: Integer;
begin
  for I := 0 to Length(FRequestPositionElement)-1 do
    if Assigned(FRequestPositionElement[I]) then
      FRequestPositionElement[I].Free;
  SetLength(FRequestPositionElement, 0);
  inherited Destroy;
end;

function RequestPositionArray.GetRequestPositionArray(Index: Integer): RequestPosition;
begin
  Result := FRequestPositionElement[Index];
end;

function RequestPositionArray.GetRequestPositionArrayLength: Integer;
begin
  if Assigned(FRequestPositionElement) then
    Result := Length(FRequestPositionElement)
  else
  Result := 0;
end;

constructor ResponsePositionArray.Create;
begin
  inherited Create;
  FSerializationOptions := [xoInlineArrays];
end;

destructor ResponsePositionArray.Destroy;
var
  I: Integer;
begin
  for I := 0 to Length(FResponsePositionElement)-1 do
    if Assigned(FResponsePositionElement[I]) then
      FResponsePositionElement[I].Free;
  SetLength(FResponsePositionElement, 0);
  inherited Destroy;
end;

function ResponsePositionArray.GetResponsePositionArray(Index: Integer): ResponsePosition;
begin
  Result := FResponsePositionElement[Index];
end;

function ResponsePositionArray.GetResponsePositionArrayLength: Integer;
begin
  if Assigned(FResponsePositionElement) then
    Result := Length(FResponsePositionElement)
  else
  Result := 0;
end;

initialization
  InvRegistry.RegisterInterface(TypeInfo(Lieferung), 'http://ws.vdlinde.de/lieferung/''');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Lieferung), 'https://ws.vdlinde.de/lieferung/Lieferung');
  InvRegistry.RegisterInvokeOptions(TypeInfo(Lieferung), ioDocument);
  RemClassRegistry.RegisterXSInfo(TypeInfo(Typ), 'http://ws.vdlinde.de/lieferung/''Typ');
  RemClassRegistry.RegisterXSInfo(TypeInfo(Liefertermin), 'http://ws.vdlinde.de/lieferung/''Liefertermin');
  RemClassRegistry.RegisterXSClass(RequestPosition, 'http://ws.vdlinde.de/lieferung/''RequestPosition');
  RemClassRegistry.RegisterXSInfo(TypeInfo(RequestPositionElement), 'http://ws.vdlinde.de/lieferung/''RequestPositionElement');
  RemClassRegistry.RegisterXSClass(RequestPositionArray, 'http://ws.vdlinde.de/lieferung/''RequestPositionArray');
  RemClassRegistry.RegisterSerializeOptions(RequestPositionArray, [xoInlineArrays]);
  RemClassRegistry.RegisterXSClass(ResponsePosition, 'http://ws.vdlinde.de/lieferung/''ResponsePosition');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ResponsePositionElement), 'http://ws.vdlinde.de/lieferung/''ResponsePositionElement');
  RemClassRegistry.RegisterXSClass(ResponsePositionArray, 'http://ws.vdlinde.de/lieferung/''ResponsePositionArray');
  RemClassRegistry.RegisterSerializeOptions(ResponsePositionArray, [xoInlineArrays]);
end.

Und das der Code den ich dafür benutze eine Anfrage an den Server zu senden

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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure TForm1.HttpRioHttpWebNodeBeforePost(
const HTTPReqResp: THTTPReqResp; Data: Pointer);
var TimeOut : integer;
begin
   TimeOut := 2000// in milleseconds.
   if not InternetSetOption(Data,
         INTERNET_OPTION_RECEIVE_TIMEOUT,
         Pointer(@TimeOut),
         SizeOf(TimeOut)) then
   ShowMessage(SysErrorMessage(GetLastError));

   if not InternetSetOption(Data,
                      INTERNET_OPTION_USERNAME,
                      PChar(rio.HTTPWebNode.UserName),
                      Length(rio.HTTPWebNode.UserName)) then
       ShowMessage(SysErrorMessage(GetLastError));

   if not InternetSetOption(Data,
                      INTERNET_OPTION_PASSWORD,
                      PChar(rio.HTTPWebNode.Password),
                      Length (rio.HTTPWebNode.Password)) then
       ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TForm1.Button4Click(Sender: TObject);
var rpa : RequestPositionArray;
rpa1 : ResponsePositionArray;
rp : RequestPosition;
s,s1,s2,s3,s4,s5: widestring;
len : integer;
begin
   if not Assigned(rio) then
   begin
      rio := THTTPRIO.Create(self);
      rio.HTTPWebNode.UserName := 'username';
      rio.HTTPWebNode.Password := 'password';
      rio.HTTPWebNode.OnBeforePost := self.HttpRioHttpWebNodeBeforePost;
   end;
     if not assigned(lf) then
     begin
     lf := GetLieferung(True);
     lf.Lieferung('AUFTRAG',s,s1,ZH,rpa,s2,s3,s4,s4,rpa1);

     rpa.Create;
     rpa.GetRequestPositionArray(10);
     rp := rpa.GetRequestPositionArray(10);
    end;
end;


Aber das Problem: Die Funktion lf.Lieferung liefert mir einen Fehler: Dateityp Typ unbekannt. Kann das jemand für mich bitte ausprobieren und gegenfals helfen.
Danke schon mal im Vorraus.

Nachbar


DerNetteNachbar - So 04.01.09 21:59

PUSH


DerNetteNachbar - Mo 05.01.09 12:29

Hat den keine eine leise Ahnung wie ich die TYpen definieren soll? In der WSDL Datei sind die als string definiert, jedoch wird mir derselbe Fehler gemeldet: und zwar der erste in der Funktion übergebene Typ als 'unexpected subelement Typ'. Typ ist in dem Fall die Definition davon.

MfG


Bernhard Geyer - Mo 05.01.09 14:27

Die Delphi-WSDL/SOAP-Implementierungen sind in älteren Delphi-Versionen für Real-Life-Schnittstellen unbrauchbar da zu fehlerhaft/zu wenig interoperable.

MS hat ein Toolkit veröffentlich um zu bestehenden WSDL/SOAP-Schnittstellen einen COM-Wrapper bereitzustellen (Download-URL im Moment mir nicht mehr geläufig). Dieser düfte relativ Problemlos verwendbar sein.


DerNetteNachbar - Mo 05.01.09 15:23

Ich benutze Delphi 7 bzw. Delphi 2007 und andere Schnittstellen wie Google klappen einwandfrei.


DerNetteNachbar - Di 06.01.09 10:08

PUSH


DerNetteNachbar - Di 06.01.09 13:31

Kennt jemand diesen Com Wrapper? bzw. wie man diesen verwendet?

MfG


Bernhard Geyer - Di 06.01.09 20:35

Wie wäre es damit http://msdn.microsoft.com/de-de/library/ms995772.aspx ?


DerNetteNachbar - Mi 07.01.09 10:43

Ich konnte da leider nicht sehr viel rauslesen. Kennt Ihr vielleicht paar Sample Codes für Delphi?

MfG