Я сделал сервис SOAP WSDL, который работает.Я добавил 2 метода для тестирования - первый (setX ($ x)) устанавливает $ this-> x в $ x, второй (getX ()) возвращает $ this-> x.Конструктор моего SOAP-класса устанавливает для $ this-> x значение «FAIL», в то время как код клиента вызывает setX («SUCCESS»).
Я добавил несколько фиктивных переменных, чтобы сделать их тип запроса-ответа (в одностороннем порядке возникают некоторые странные проблемы с некоторыми клиентами).
Ну, это работает, клиент вызывает $ s-> setX ('SUCCESS') и $ x = $ s-> getX ('')и $ x = 'УСПЕХ'.Как и ожидалось.
Но для этого мне пришлось использовать следующую опцию с клиентом:
'cache_wsdl' => WSDL_CACHE_MEMORY
Почему?Это бьет меня.С любой другой опцией она просто не работает - $ x = 'FAIL' (без постоянства)
ОК, работает, так в чем проблема?Иногда, да, иногда это не работает.Код случайным образом возвращает «FAIL» (поскольку постоянство было нарушено).Когда он начинает возвращать «FAIL», он продолжает это делать.Вы можете запустить другой браузер, и он НАИБОЛЕЕ ВЕРОЯТНО сообщит «УСПЕХ».
Теперь самая странная часть.Давайте использовать один браузер.Давайте повторим следующие шаги: запустите браузер, проверяйте вывод кода, пока он не вернет «FAIL».Теперь нажмите Ctrl + R и удерживайте около 2 секунд.Внезапно это работает, теперь это «УСПЕХ» каждый раз!
WTF? !!!Я действительно дважды проверил сессию.Сессия создается правильно перед каждым созданием SoapServer.Каждый раз, когда вызывается $ server-> setPersistence (SOAP_PERSISTENCE_SESSION).И это работает только "большую часть времени" - что делает его совершенно бесполезным!
Любые подсказки?
PS: WSDL моего сервиса генерируется и кэшируется.Я добавил sleep (1) в генератор WSDL и протестировал клиентский код.Похоже, что не регенерирует WSDL (ок. 10 мс, а не 1010 мс).Инвалидация WSDL-кэша (с TTL, установленным в 1) не делает работу персистентной, но глупое удерживание Ctrl + R в браузере делает!
PS2: генератор WSDL, класс SOAP и клиент тестирования находятся в 3 разных файлах.Класс WSDL фактически запускает сервер.Он вызывается из файла, который содержит класс SOAP (index.php).
PS3: я удалил .htaccess, который ничего не должен сломать, я удалил некоторые неиспользуемые файлы и код, и бум - теперь он работает каждый раз, слюбой тип wsdl_cache!Ну, я не знаю, что это было, .htaccess?Возможно, проблемы с сервером Apache.Я не могу больше это воспроизводить.Если у вас возникли похожие проблемы, мой совет - удалить .htaccess и попытаться перезапустить Apache.Проблемы возникли очень рано утром / поздно ночью - я не уверен, но я думаю, что cron в то время выполнял несколько интенсивных задач резервного копирования.Возможно, принудительная перезагрузка сказала Linux расслабиться с фоновыми задачами и выделить больше ресурсов для Apache и PHP - это объяснило бы странное поведение Ctrl + R.
ОБНОВЛЕНИЕ: По-прежнему происходит случайный сбой!Работает большую часть времени, но я не могу положиться на эту функцию.(Протестировано с другой службой, с другим клиентом, но все еще с тем же сервером).