Thema: Delphi Generic List über SOAP

Einzelnen Beitrag anzeigen

Postman1986

Registriert seit: 24. Jul 2007
Ort: Trier
31 Beiträge
 
#1

Generic List über SOAP

  Alt 21. Apr 2010, 09:50
Hi,

ich möchte gern einen Delphi basierten Dienst schreiben, der einige Methoden bereitstellt die von einem C# Client aus genutzt werden können.

Dazu habe ich einen SOAP Server in Delphi erstellt der den Webservice anbietet. Das funktioniert soweit ganz gut, die vorgenerierten Testmethoden wie EchoDouble etc. können ohne Probleme in C# importiert und genutzt werden, mein Problem tritt jetzt beim Versuch auf, eine generische Liste zu exportieren.

Der Delphi Server erstellt zwar ohne zu zögern die wsdl Datei, Visual Studio bemängelt beim Import dann aber die "<" und ">" Tags der generic List Deklaration (was hinsichtlich validem XMLs ja auch sein gutes Recht ist).

Die Frage ist nun, wie man eine generische Liste sauber über SOAP exportieren kann.


Hier die Implementation der Delphi Server Funktion:
Delphi-Quellcode:
function TJamSOAPWebService.GenericList(const Value: TList<string>): TList<string>; stdcall;
var
  myString: string;
begin
  myString := 'Hey :)';
  Value.Add(myString);
  Result := Value;
end;

Der generierte XML Code (relevanter Teil):
XML-Code:
<types>
&#8722;
<xs:schema targetNamespace="urn:JamSOAPWebServiceIntf">
&#8722;
<xs:simpleType name="TEnumTest">
&#8722;
<xs:restriction base="xs:string">
<xs:enumeration value="etNone"/>
<xs:enumeration value="etAFew"/>
<xs:enumeration value="etSome"/>
<xs:enumeration value="etAlot"/>
</xs:restriction>
</xs:simpleType>
&#8722;
<xs:complexType name="TDoubleArray">
&#8722;
<xs:complexContent>
&#8722;
<xs:restriction base="soapenc:Array">
<xs:sequence/>
<xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:double[]"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
&#8722;
<xs:complexType name="TMyEmployee">
&#8722;
<xs:sequence>
<xs:element name="LastName" type="xs:string"/>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="Salary" type="xs:double"/>
</xs:sequence>
</xs:complexType>
&#8722;
<xs:complexType name="TList<System.string>">
&#8722;
<xs:complexContent>
&#8722;
<xs:extension base="TEnumerable<System.string>">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
&#8722;
<xs:schema targetNamespace="urn:Classes">
&#8722;
<xs:complexType name="TList">
<xs:sequence/>
</xs:complexType>
</xs:schema>
</types>

Der Fehler:
Code:
Error: Invalid 'name' attribute value 'TList<System.string>': 'The '<' character, hexadecimal value 0x3C, at position 5 within the name, cannot be included in a name.'.

Gruß Daniel
Daniel
  Mit Zitat antworten Zitat