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:
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.
- Sehen Sie die WSDL-und/oder SOAP-Nachricht wäre hilfreich.
- Guter Punkt, jetzt Hinzugefügt.
- Ich habe festgestellt, dass einige andere StackOverflow-Fragen, die angezeigt werden meinen sehr ähnlich, obwohl keiner haben keinerlei praktische Lösung, wie dieser RPC-bezogene ein und ein weiteres, speziell über WSDL-arrays und andere über PHP-webservices konsumiert .NET.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese kann dabei helfen:
http://social.msdn.microsoft.com/Forums/en/asmxandxml/thread/f550e2b2-af9e-4653-a618-cffffdc70fdf
http://bytes.com/topic/net/answers/426522-system-invalidcastexception-cannot-assign-object-type-system-xml-xmlnode-object-type-system-string
Hatte das gleiche problem. Alles was ich zu tun hatte, ist fix jeder Namensraum (namespace) aus
https
zuhttp
im erzeugten cs-Datei. Also, es könnte Ihr namespaces sind falsch.