ugrás a tartalomhoz

Hogyan adjak vissza tömböt SOAP webszolgáltatásból?

w3net · 2008. Ápr. 7. (H), 15.44
PHP5-ben kell SOAP webszolgáltatást irnom. Egy olyan tagfüggvényt kell irnom, ami egy tömböt ad vissza. Ime a
WSDL fájl. PHP-ben irtam egy klienst, úgy működik, ahogyan működnie kell (próba). Vagyis a kliens egy tömböt kap vissza. Ha .NET-ben irok hozzá egy klient, akkor egy tömb helyett egy objekumot kapok vissza, amivel semmit sem lehet kezdeni, mert nem kollekció.

.NET-ben elkészitettem egy hasonló webszolgáltatást, ami kicsit más WSDL fájl-t generált.
A lényeg talán az, hogy a .NET a tömb adattipust igy definiálta a WSDL-ben:
<s:element name="HelloWorldResponse">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="tns:ArrayOfString" />
    </s:sequence>
  </s:complexType>
</s:element>
<s:complexType name="ArrayOfString">
  <s:sequence>
    <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
  </s:sequence>
</s:complexType>
C# nyelven készitettem egy egyszerű konzolos alkalmazást, hogy kipróbljam a .NET-es webszolgáltatást. String[] array-t kapott vissza, ami jó. Ugyanezt a .NET-es webszolgáltatást is meghivtam PHP5-ből, de egy objektumot kaptam vissza array helyett:
stdClass Object ( [HelloWorldResult] => stdClass Object ( [string] => Array(…))) 
Persze modhatjátok azt is, hogy el lehet érni a tömböt PHP-ből igy:
echo ("ennyi eleme van a tömbnek:" count($ret->HelloWorldResult->string));
Ez persze működik is, de miért nem kapok vissza csak egy Array-t? Ha a C# kliens egy tömböt kap vissza, akkor a PHP miért kap vissza mást?

A kérdésem tehát a köv.: Hogyan módositsam a WSDL fájlt, hogy PHP-ből és .NET/Java is egy array-t kapjak vissza. Vagy mit kéne csinálnom PHP-ben?
Előre is köszönöm az ötleteket.
 
1

Nem biztos...

Gixx · 2008. Ápr. 8. (K), 20.48
...de azt hiszem, a PHP5 sem tömböt ad vissza, hanem objektumot, amibe be van tolva az iterátor interfész, így foreach-elhető és itt-ott tömbként kezelhető. Feltéve, hogy a PHP5 beépített SOAP osztályát használod. Bár mint mondtam ez csak halovány derengés a memóriám porosabb szegletéből.