Probleme mit C# .NET-client verwenden von externen PHP-SOAP-web-service liefert hash-arrays

Schreibe ich ein .NET web-Anwendung, muss für den Aufruf von externen webservices. Die Unterlagen, die ich bereitgestellt haben, enthält code-Beispiele in PHP.

Kann ich erfolgreich erstellen einer web Referenz im VS2010 mit dem WSDL-Adresse wurde zur Verfügung gestellt für mich, und mit fiddler kann ich sehen, dass das erwartete XML wird immer gesendet und empfangen werden. Aber .NET scheint Probleme beim Parsen der zurückgegebenen XML.

Die einfache web-service, die ich bin den Umgang mit akzeptiert nur ein array mit Benutzernamen und soll wieder einige verschachtelte hash-arrays der Benutzer (mit jeder Benutzer seine eigene array-name, Typ, etc. Felder) und eine Reihe von Fehlern (für alle Benutzernamen, die nicht übereinstimmen). Die Unterlagen, die ich habe, beschreibt er in 'PHP-ish':

array (
  'users' => array (
    array(
      'id' => 11,
      'username' => 'mick',
      'firstname' => 'Mick',
      'lastname' => 'Byrne'
    ),
    ...
  )
  'errors' => array(
    array(
      'username' => 'whoever',
      'errorcode' => 'NOSUCHUSER'
    )
  )
)

Ich bin immer in die SOAP-XML, entspräche dies. Jedoch, wenn .NET versucht, um daraus ein Ergebnis es gibt eine Ausnahme:

Cannot assign object of type System.Xml.XmlNode[] to an object of type System.String.

Interessant ist, die entsprechende Methode .NET für mich geschaffen hat, basierend auf der WSDL-sagt, es gibt eine einfache alte string was darauf hindeutet, dass Sie können nicht mit der Art und Weise der WSDL definiert den Rückgabetyp.

Die vollständige WSDL ist hier erhältlich:

http://www.elearning.psychology.org.au/webservice/soap/server.php?wsdl=1&wstoken=dc45858adb6f28b7feae87014d46d9b3

Hier ist ein Beispiel der geschickt und die zurückgegebenen XML-Daten aus dem diese grundlegende Holen Benutzernamen anfordern:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.elearning.psychology.org.au/webservice/soap/server.php?wstoken=dc45858adb6f28b7feae87014d46d9b3" xmlns:types="http://www.elearning.psychology.org.au/webservice/soap/server.php?wstoken=dc45858adb6f28b7feae87014d46d9b3/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <tns:netspot_user_get_users_by_username>
            <usernames href="#id1" />
        </tns:netspot_user_get_users_by_username>
        <soapenc:Array id="id1" soapenc:arrayType="xsd:string[1]">
            <Item>557788</Item>
        </soapenc:Array>
    </soap:Body>
</soap:Envelope>

Und Antwort:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.elearning.psychology.org.au/webservice/soap/server.php?wstoken=dc45858adb6f28b7feae87014d46d9b3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:netspot_user_get_users_by_usernameResponse>
            <return xsi:type="ns2:Map">
                <item>
                    <key xsi:type="xsd:string">errors</key>
                    <value SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array">
                        <item xsi:type="ns2:Map">
                            <item>
                                <key xsi:type="xsd:string">username</key>
                                <value xsi:type="xsd:string">557788</value>
                            </item>
                            <item>
                                <key xsi:type="xsd:string">errorcode</key>
                                <value xsi:type="xsd:string">NOSUCHUSER</value>
                            </item>
                        </item>
                    </value>
                </item>
            </return>
        </ns1:netspot_user_get_users_by_usernameResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Jegliche Hilfe würde sehr geschätzt werden.

InformationsquelleAutor Mick Byrne | 2011-03-29
Schreibe einen Kommentar