PHP SoapServer: не разрешает XML (файл WSDL) - нет XML-файла - с «? Wsdl» в URL - PullRequest
1 голос
/ 11 ноября 2011

У меня проблемы с моим сервером Soap, реализованным на PHP на моем производственном сервере (удаленном).

Я реализовал простой сервер Soap (собственный класс PHP) с функцией on on в режиме WSDL.

Итак, мой код выглядит так:

ini_set("soap.wsdl_cache_enabled", "0");

$server = new SoapServer("wsSeguimiento.wsdl");

$server->addFunction("ResultadoDetalleExtendido");

$server->handle();

Теперь, как вы знаете, когда вы вызываете сервер через веб-браузер с URL-адресом типа "http://localhost/soapserver/wsServer.php",, вы получаете пустую страницу - в моем случае - или все, что вы там запрограммировали (код сервера).

Но если вы вызываете тот же URL с "? Wsdl" в конце "http://localhost/soapserver/wsServer.php?wsdl",, то сервер (я полагаю, что это функция дескриптора) разрешает XML wsdl в веб-браузере, поэтому вы получаете текстовый / текстовый тип содержимого и вы можете увидеть само определение XML.

Теперь это работает в моей среде разработки. Нет проблем. Я создал клиент Soap, чтобы протестировать мой собственный сервер и посмотреть, вернет ли он ожидаемый ответ, и все работает нормально. Но когда я загружаю код на рабочий сервер, он не работает.

Firefox показывает в URL с вызовом «? Wsdl» типичную ошибку, говорящую «XML is malformed», но в данном конкретном случае это с самого начала, как если бы вообще не было XML-файла. И если я использую свой клиент, я получаю ошибку:

SOAP-ERROR: синтаксический анализ WSDL: не удалось загрузить из 'http: //.../SOAP_SERVER/seguimientoServer.php? Wsdl': начальный тег ожидается, '<' не найден </strong>

Я правильно изменил пространства имен и URL-адреса в XML-файле WSDL. Так что это должно работать правильно. Но это не так.

Я обнаружил, что существуют существующие ошибки, связанные с самим заголовком HTTP, основанные на кусочных данных, длине контента, X-powered-by, что угодно ...

Но я не вижу решения.

Я сделал небольшой взлом на моем сервере, основываясь на этом (после вызова handle ()):

if( isset($_REQUEST['wsdl']) )
{
    ob_clean();
    echo file_get_contents( "wsSeguimiento.wsdl" );
}

И с этим, это действительно работает! Но я уверен, что это не должен быть способ решить это ...

1 Ответ

0 голосов
/ 11 ноября 2011

похоже, что в начале вашего wsdl есть недопустимый символ.может быть пробел?

...