Привет, у меня проблемы с отправкой массивов, структур и массивов структур из PHP на SOAP-сервер ASP.NET …
У кого есть разрешение на это? Я много дней искал в Интернете, и любое занятие помогало мне. Перфапы Я что-то забываю …
Есть примеры моего кода:
$client = new SoapClient($options); $pCriteria = new stdClass(); $pCriteria->type=1; $pCriteria->capacity=4; //Test 1 (fail): $resp = $client->GetRooms(array("pCriteria"=>$pCriteria)); //Test 2 (fail): $resp = $client->GetRooms(array("pCriteria"=>new SoapVar($pCriteria, SOAP_ENC_OBJECT, "TCriteria", "http://www.w3.org/2001/XMLSchema"))); print_r($resp);
Я не знаю, как кодировать функции, требующие массив TCriteria (TCriteria [], тип TCriteria_Array) либо … Я попытался отправить необработанный массив, SoapVar с кодировкой SOAP_ENC_ARRAY и тип TCriteria_Array, но он не работает (сервер SOAP становится недоступным и его необходимо перезапустить).
Я также пробовал создавать классы для сложных типов, вместо stdClass, но не работал.
Я не знаю, где проблема. Администраторы сервера не могут мне помочь, и я не нашел никакого разрешения на интернет. Я немного отчаянный хе-хе.
Не могли бы вы мне помочь? Можете ли вы предоставить образцы кода с тремя случаями (массив простых данных, массив структуры и структуры)? Благодаря!
У меня была аналогичная ситуация с клиентом PHP Soap, взаимодействующим с .NET Soap Server с использованием WSDL 2.0. Вот одна вещь, которую я обнаружил: передавая информацию на сервер, вы должны явно определить переменную как объект SoapVar. Поэтому в приведенном выше примере измените его на:
$pCriteria->type = new SoapVar(1, XSD_INT, 'xsd:int');
Передача массива аналогична, необходимо передать массив SoapVars:
$pCriteria->type = array(new SoapVar(1, XSD_INT, 'xsd:int'), new SoapVar(2, XSD_INT, 'xsd:int', new SoapVar(3, XSD_INT, 'xsd:int'));`enter code here`
Кроме того, вы можете использовать несколько встроенных функций SoapClient, чтобы получить дополнительную информацию о возможных ошибках.
$client->__getLastRequest() //To display the XML that you sent to the server $client->__getLastResponse() //to display the XML that is sent in response to your request
Если вы можете получить копию ожидаемого формата WSDL, вы можете использовать ответ из приведенных выше команд, чтобы определить, что происходит неправильно. Обычно вы можете получить доступ к этому из URL-адреса, который вы передаете в SoapClient. Так, например, если URL-адрес службы WSDL – http://example.com/webservices/wvrgroupservice.asmx?WSDL , введите http://example.com/webservices/wvrgroupservice.asmx, чтобы просмотреть функции и ожидаемый XML из этого сервер.