2013-04-25 1 views
0

У меня есть веб-сервис php soap, который я создал с помощью NuSOAP. Я использую файл test.php для проверки его в браузере как «http://www.mydowmain.com:8080/webservice/5/test.php».PHP SOAP webservice с NuSOAP не дает результата, если WSDL настроен

Мой код:

webservice.php

<?php 
require_once('../lib/nusoap.php'); 

$server = new nusoap_server(); 

$server ->configureWSDL('server', 'urn:server'); //this line causes to 'no result' 
$server ->wsdl->schemaTargetNamespace = 'urn:server'; //this line causes to 'no result' 
$server -> register('getData'); 

function getData() 
{ 
    $items = array(array("item1"),array("item2")); 
    return $items; 
} 

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
$server ->service($HTTP_RAW_POST_DATA); 
?> 

test.php

<?php 
    require_once('../lib/nusoap.php'); 
    $client = new nusoap_client("http://www.mydowmain.com:8080/webservice/5/webservice.php?wsdl"); 

    $result = $client ->call('getData'); 

    print_r($result); 
?> 

Проблема:

Если удалить эти строки

$server ->configureWSDL('server', 'urn:server'); 
$server ->wsdl->schemaTargetNamespace = 'urn:server'; 

он показывает мне результат штраф. В противном случае я получаю пустой экран, ничего не получаю. Но мне действительно нужно настроить WSDL.

Как я могу редактировать webservice.php так, что WSDL будет настроен, и я могу получить массив результатов на test.php?

ответ

0

Попробуйте это изменить:

$server ->wsdl->schemaTargetNamespace = 'urn:server'; 

В это:

$server ->wsdl->schemaTargetNamespace = $namespace; 

и определить $ имен на нем. Это сделало трюк для меня.

Это мой код моего NuSOAP WebService:

require_once("lib/nusoap.php"); 
$namespace = "http://localhost:8080/Testservice/service.php?wsdl"; 
$server = new soap_server(); 
$server->configureWSDL("TestService"); 
$server->wsdl->schemaTargetNamespace = $namespace; 
+0

Таким образом, пространство имен является '$ namespace =" urn: server "' Я предполагаю? –

+0

Я обновил свой ответ .. – Matheno

1

Чтобы просмотреть информацию об ошибке о клиенте можно добавить:

$result = $client->call('getData'); 

$err = $client->getError(); 
if ($err) { 
// Display the error 
echo '<h2>Error</h2>' . $err; 
// At this point, you know the call that follows will fail 
     exit(); 
} 
else 
{ 
echo $result; 
} 

После этого, в server.php, возможно, регистр требуется дополнительная информация о возвращаемом значении.

$server->register('getData', 
    array("response"=>"xsd:string"), 
    'http://www.mydowmain.com:8080' 
); 
Смежные вопросы