Yii Framework Forum: Проблема С Реализацией Веб Сервиса - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Проблема С Реализацией Веб Сервиса ошибка soap Rate Topic: -----

#1 User is offline   morduhovskii 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 13-February 13

Posted 13 February 2013 - 12:34 AM

Доброго времени суток.
Пытаюсь освоить веб сервис SOAP.
Прописал все по мануалу,
public function actions()
{
        return array(
            'wsdl' => array(
                'class' => 'CWebServiceAction',
            ),
        );
}

WSDL получаю, тут все ок. Далее есть пока единственный метод возвращающий ассоциативный массив.
    /**
     * @param string $needle     строка для поиска
     * @param array  $attributes атрибуты модели
     * @return array значение
     * @soap
     */
    public function findByName($needle, $attributes = array())
    {
        ...
    }


Создаю клиент, вызываю метод - в ряде случаев все отрабатывает нормально, иногда вылетает ошибка
"looks like we got no XML document". В ответе от сервера в этом случае приходит обрезанный xml последний тег выглядит вот так - </SOAP-ENV:Envelop. Преимущественно ошибка вываливается на больших пакетах, когда в массиве много значений.
Очень надеюсь на вашу помощь. Перерыл все, не нашел ничего похожего.
0

#2 User is offline   morduhovskii 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 13-February 13

Posted 15 February 2013 - 03:18 AM

Набросал пример подтверждающий ошибку, может быть так будет нагляднее

<?php
class FiasController extends CController
{
    public function actions()
    {
        return array(
            'wsdl' => array(
                'class' => 'CWebServiceAction',
            ),
        );
    }

    /**
     * @return array
     * @soap
     */
    public function success()
    {
        $result = array();
        for ($i = 0; $i < 4; $i++) {
            $result[$i] = array(
                'foo1'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo2'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo3'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo4'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo5'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo6'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo7'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo8'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo9'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo10' => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo11' => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo12' => '18ad96e6-5526-11e0-9c19-00248c654095',
            );
        }
        return $result;
    }

    /**
     * @return array
     * @soap
     */
    public function fail()
    {
        $result = array();
        for ($i = 0; $i < 5; $i++) {
            $result[$i] = array(
                'foo1'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo2'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo3'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo4'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo5'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo6'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo7'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo8'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo9'  => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo10' => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo11' => '18ad96e6-5526-11e0-9c19-00248c654095',
                'foo12' => '18ad96e6-5526-11e0-9c19-00248c654095',
            );
        }
        return $result;
    }

    public function actionTestSoap()
    {
        ini_set("soap.wsdl_cache_enabled", "0");
        $client = new SoapClient('адрес_сервера/fias/wsdl/', array("trace"      => 1,
                                                                       "exceptions" => 0));

        $result = $client->success();
        echo "<b>Success Request:</b><br>";
        echo htmlspecialchars($client->__getLastRequest()) . "<br>";
        echo "<b>Success Response:</b><br>";
        echo htmlspecialchars($client->__getLastResponse()) . "<br>";
        echo "<b>Success Result:</b>";
        var_dump($result);
        $result = $client->fail();
        echo "<b>Fail Request:</b><br>";
        echo htmlspecialchars($client->__getLastRequest()) . "<br>";
        echo "<b>Fail Response:</b><br>";
        echo htmlspecialchars($client->__getLastResponse()) . "<br>";
        echo "<b>Fail Result:</b>";
        var_dump($result);
    }
}


В экшне fias/testSoap сначала вызываю функцию success - при этом все ок, потом функцию fail в этом случае xml ответ обрезан, конечный тег не закрывается. Разница между методами success и fail в том что во второй на 1 элемент в массиве больше.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users