@sokolpeter

Почему PHP SoapClient закрывает соединение?

Для отправки SOAP-запроса использую php SoapClient. При отправке не фиксируется никаких ошибок, но ответа нет. На сервере фиксируется: HTTP Server: connection closed prematurely by client. Смотрел через tcpdump - действительно от клиента уходит пакет с флагом F.

Все тоже самое (пакет/http-заголовки) пробую отправлять через soapui - ошибки на сервере нет, получаю ответ от сервера.
Есть идеи где копнуть в php SoapClient ?
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 2
@lubezniy
А отправлять через soapui пробуете с той же машины, на которой установлен сервер? Если да, то, возможно, потребуется сделать настройки в встроенном файрволле (например, в брандмауэре Windows), чтобы PHP имел право лезть в сеть (и соответственно скрипты, им исполняемые).
Ответ написан
Комментировать
@sokolpeter Автор вопроса
Нашел причину)
В моем wsdl отсутствовал wsdl:output, то есть soap-клиент не дожидался ответа от сервиса и закрывал соединение. А сервер по каким-то причинам не переваривал такое поведение.

Как вариант, чтобы не править все wsdl можно переопределить метод __doRequest, чтобы принудительно в $one_way передавать 0:

class MySoapClient extends SoapClient
{
  public function __doRequest ($request, $location, $action, $version, $one_way = 0)
  {
    return parent::__doRequest ($request, $location, $action, $version, 0);
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы