Локален service.wsdl все още може да накара SoapClient да изтегля отдалечени документи по време на създаването. Правенето на първия файл локален премахва само това първо изтегляне:

local service.wsdl
  → internal Common.xsd
  → external Types.xsd
       → another schema location

Започнете от първото неуспешно извличане, преди първото бизнес извикване по SOAP. Избройте всеки импорт на WSDL и всяко местоположение на schema, включително документите, към които те от своя страна сочат. Запазете базовия URL или път, използван за разрешаване на всяка относителна препратка. Отделете вътрешните хостове от ресурсите, които наистина се нуждаят от външния proxy.

Явен SoapClient proxy може да изпрати вътрешна schema през посредник с различна гледна точка към DNS или различна политика за достъп. Променлива no_proxy на ниво процес не доказва, че този път на зареждане я чете. Използвайте опциите, документирани за вашата версия на PHP; именуването на опция по променлива на средата не създава селектор за всеки импорт.

За да разположите дефинициите изцяло локално, получете одобрените версии на целия набор от зависимости, обновете съответните места за импорт към локалния пакет и запазете базите им на относителни пътища. Версионирайте тези документи заедно, така че нов коренов WSDL да не използва остарели типове.

Не пипайте идентификаторите на пространствата от имена. Те може да изглеждат като URL, но идентифицират речника на schema, вместо да казват на зареждащия откъде да вземе файл. Замяната им може да промени договора за услугата.

Тествайте отново създаването със записано състояние на кеша: кешираните дефиниции могат да скрият липсваща зависимост на една машина. Замяната на URL на услугата се прилага на по-късен етап, а персонализиран __doRequest() обработва SOAP обмена; не бива да се предполага, че някое от двете пренаписва или прихваща всички изтегляния на schema по време на създаването.

Подобни статии