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>
−
<xs:schema targetNamespace="urn:JamSOAPWebServiceIntf">
−
<xs:simpleType name="TEnumTest">
−
<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>
−
<xs:complexType name="TDoubleArray">
−
<xs:complexContent>
−
<xs:restriction base="soapenc:Array">
<xs:sequence/>
<xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:double[]"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
−
<xs:complexType name="TMyEmployee">
−
<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>
−
<xs:complexType name="TList<System.string>">
−
<xs:complexContent>
−
<xs:extension base="TEnumerable<System.string>">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
−
<xs:schema targetNamespace="urn:Classes">
−
<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