Проверьте, полностью ли работает SOAP-сервер на основе PHP

У меня проблема с SOAP-сервером, которая сводит меня с ума от пары дней. У меня есть очень простой PHP-скрипт SOAP-клиента, который также опрашивает простой PHP-скрипт SOAP-сервера.

У меня есть точная копия этих сценариев на моем сервере отладки, и они работают безупречно (это просто функция «Здравствуй, мир»), но на производстве кажется, что нет способа получить ответ от мыла-сервера от мыла-клиента. Я продолжаю получать сообщение об ошибке «Процедура ‘ns1: testHello’ not present» (testHello — это имя функции).

Я знаю, что производственный клиент работает, потому что если я звоню с производственного сервера для разработки WSDL, он работает отлично. Я действительно думаю, что это как-то связано с сервером SOAP, но как я могу точно знать, работает ли он правильно и что не так?

Если я посмотрю дамп infophp (), я увижу, что и SOAP-сервер, и клиент включены

Soap Client     enabled
Soap Server     enabled

Directive   Local Value Master Value
soap.wsdl_cache 1   1
soap.wsdl_cache_dir /tmp    /tmp
soap.wsdl_cache_enabled 0   1
soap.wsdl_cache_limit   5   5
soap.wsdl_cache_ttl 0   86400

Я попытался форсировать версии SOAP_1_1 и SOAP_1_2, но без изменений.
Я пытался отключить все виды кэша, но без изменений.
Я читал, что «функция ns: X отсутствует», как правило, из-за неправильной конфигурации WSDL, но как это может быть неправильно, если это точная копия (кроме targetNamespace, xmlns: tns и soap: address urls, указывающих на рабочий сервер)

Я начинаю думать, что это как-то связано с некоторыми настройками конфигурации веб-сервера. Есть идеи? Какие тесты я могу сделать?

Большое спасибо заранее.

Мой код СЕРВЕРА:

    ini_set("display_errors", "off");
ini_set("soap.wsdl_cache_enabled", 0);
ini_set('soap.wsdl_cache_ttl',0);

$wsdl_url="http://SITE_URL/test.wsdl";function testHello($functionName){
$return = "Hello, ".$functionName;
return $return;
}

$server= new SoapServer($wsdl_url, array('cache_wsdl' => WSDL_CACHE_NONE));
$server->addFunction("testHello");
$server->handle();

Мой код клиента

ini_set("soap.wsdl_cache_enabled", 0);
ini_set('soap.wsdl_cache_ttl',0);
ini_set("display_errors", "on");

$wsdl_url="http://SITE_URL/test.wsdl";

$client=new SoapClient($wsdl_url , array('cache_wsdl' => WSDL_CACHE_NONE));

try{
$t = $client-> testHello("Test");
var_dump($t);
} catch(SoapFault $e){
var_dump($e);
}

Мой файл WSDL

<?xml version="1.0" encoding="UTF-8" ?>

<definitions name="TLN"targetNamespace="http://SITE_URL/test.wsdl"xmlns:tns="http://SITE_URL/test.wsdl"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns="http://schemas.xmlsoap.org/wsdl/">

<message name="testHelloRequest">
<part name="functionName" type="xsd:string"/>
</message>

<message name="testHelloResponse">
<part name="return" type="xsd:string"/>
</message>

<portType name="testHelloPortType">
<operation name="testHello">
<input message="tns:testHelloRequest" />
<output message="tns:testHelloResponse" />
</operation>
</portType>

<binding name="testHelloBinding" type="tns:testHelloPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="testHello">
<soap:operation soapAction="" />

<input>
<soap:body use="encoded" namespace="" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>

<documentation>testHello</documentation>

<service name="testHelloService">
<port name="testHelloPort" binding="testHelloBinding">
<soap:address location="http://SITE_URL/server.php" />
</port>
</service></definitions>

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]