Проблемы с клиентом C # .NET, использующим внешний веб-сервис PHP SOAP, который возвращает хэш-массивы - PullRequest
4 голосов
/ 29 марта 2011

Я пишу веб-приложение .NET, которое должно вызывать внешние веб-сервисы.Документация, которую мне предоставили, включает примеры кода на PHP.

Я могу успешно создать веб-ссылку в VS2010, используя предоставленный мне адрес WSDL, и используя fiddler, я вижу, что ожидаемый XMLполучать отправленные и полученные.Однако .NET, похоже, испытывает проблемы с анализом возвращенного XML.

Простейший веб-сервис, с которым я имею дело, просто принимает массив имен пользователей и предназначен для возврата некоторых вложенных хеш-массивов пользователей (для каждого пользователя этособственное имя массива, поля типа и т. д.) и массив ошибок (для любых имен пользователей, которые не совпадают).Документация, которую я имею, описывает это в 'PHP-ish':

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

Я получаю SOAP XML, который бы соответствовал этому.Однако, когда .NET пытается превратить его в результат, возникает исключение:

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

Интересно, что соответствующий метод, созданный .NET для меня на основе WSDL, говорит, чтовозвращает простой старый string, который предполагает, что он не может обработать способ, которым WSDL определяет тип возвращаемого значения.

Полный WSDL доступен здесь:

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

Вот пример отправленного и возвращенного XML из этого базового запроса Get Usernames:

<?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>

И ответ:

<?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>

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 22 августа 2016

Была такая же проблема.Все, что мне нужно было сделать, это исправить каждое пространство имен от https до http в сгенерированном файле cs.Так что, возможно, ваши пространства имен неверны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...