В последнее время мы столкнулись с проблемой, которая была заблокирована в течение нескольких дней, пока вы не получите, чтобы выяснить источник. Мы давно планировали на использовании веб-сервисы . NET приложений PHP без проблем, но на этот раз это было сделано с новыми технологиями, WCF (Windows Communication Foundation) от Microsoft. NET 3.5. Проблема в том, что как только я попал в PHP приложение производства вернул пустой снимка, без дополнительной информации. Анализ журналов мы увидели, что процесс Apache привела к сегментации , что мы пришли, чтобы не видеть никаких исключений.

После многочисленных испытаний нам удалось выделить ошибку в строке кода, который создает экземпляр нового WebService, если это часть eliminábamos функционировать должным образом.

  1. SoapClient ( "http://wcf.tudominio.com/webservice/ws.svc?wsdl" ) ; Клиент $ = новый SoapClient ("http://wcf.tudominio.com/webservice/ws.svc?wsdl");

Странно то, что он заранее производственной среды, которые работали, ничего не понимал. Анализируя машин различных средах были идентичны по конфигурации, за исключением некоторых версиях и PHP SOAP параметров в производстве машин имеют кэш WSDL активирован, а другой отключен.

  1. soap.wsdl_cache_enabled = 1
  2. soap.wsdl_cache_dir = / TMP /
  3. soap.wsdl_cache_ttl = 7200
  4. soap.wsdl_cache_limit = 50

Сообщение об ошибке не может быть кэширования. Да, это, отключить кэш-памяти с производственным сервером все начали работать должным образом.

Perfect, но кэш-памяти должен быть активирован, приложение использует около 35 веб-сервисы, если для каждого экземпляра каждого из них должна быть загружена до WSDL, производительность падает на пол, имеет важное значение.

Ничего, невероятно громоздкой решение:

  1. , '0′ ) ; ini_set ('soap.wsdl_cache_enabled', '0 ');
  2. , '0′ ) ; ini_set ('soap.wsdl_cache_ttl', '0 ');
  3. , '0′ ) ; ini_set ('soap.wsdl_cache', '0 ');
  4. "http://wcf.tudominio.com/webservice/ws.svc?wsdl" ) ; Клиент $ = новый SoapClient ("http://wcf.tudominio.com/webservice/ws.svc?wsdl");
  5. , '1′ ) ; ini_set ('soap.wsdl_cache_enabled', '1 ');
  6. , '7200′ ) ; ini_set ('soap.wsdl_cache_ttl, '7200');
  7. , '3′ ) ; ini_set ('soap.wsdl_cache', '3 ');

Таким образом, отключить кэш-памяти до экземпляра WebService и только повернул снова после. Мы не нашли еще один способ решить его, ни мы нашли какого-либо упоминания о тех, кто страдает той же проблемой. Решение это плохо, очень плохо, не обойти, но она работает и позволяет нам кое-как довести дело до конца, пока мы знаем, почему это происходит.

Если вы оказались полезными эту статью ... Разделять!