Проблема использования веб-службы WCF с php / nuSoap - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть 3 клиентских сайта, все из которых зависят от внешнего веб-сервиса.Веб-сервис раньше находился на сервере ColdFusion, но он только что перешел на сервер .NET.Мой клиентский код больше не работает, и мне не везет исправлять его.Клиентские сайты находятся на php и используют nusoap для вызова веб-службы.

Я настроил этот тест, используя wsdl, как я делал это:

<code><?php
// Call the nuSOAP library 
require_once('/home/realtywest/www/lib/nusoap.php');

// Create the client instance
$client = new soapclientnusoap('http://webservices.reiwa.com/RMHPServices/ListingsService.svc?wsdl', true);

// Check for an error
$err = $client->getError();
if ($err) {
    // Display the error
    echo '<h2>Constructor error</h2><pre>' . $err . '
';// На данный момент вы знаете, что следующий вызов завершится неудачей} // Вызовите метод SOAP $ result = $ client-> call ('getListingDetail', array ('ListingNumber' => 3000975));// Проверка на наличие ошибки if ($ client-> fault) {echo '

Fault

';
    print_r($result);
    echo '
';} else {// Проверка на ошибки $ err = $ client-> getError ();if ($ err) {// Показать ошибку echo '

Error

' . $err . '
';} else {// Показать результат echo '

Result

';
        print_r($result);
    echo '
';}} // Показать запрос и ответ echo '

Request

';echo '
' . htmlspecialchars($client->request, ENT_QUOTES) . '
';echo '

Response

';echo '
' . htmlspecialchars($client->response, ENT_QUOTES) . '
';// Показать сообщения отладки echo '

Debug

';echo '
' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '
';?>

Результаты этого сценария можно увидеть здесь: http://www.realtywest.com.au/listings/test_wsdl.php

, который возвращает внутреннюю ошибку службы ..

Я погуглил свою проблему и нашелэто действительно старое сообщение на форуме: http://www.sitepoint.com/forums/showthread.php?t=97632, где они предположили, что иногда веб-сервисы .NET настраиваются по-другому, и не передавать его в nusoap как wsdl, также при вызове, чтобы фактически передать запрос, а не просто массивпеременные ..

, поэтому я попробовал так:

<code><?php
// Call the nuSOAP library 
require_once('/home/realtywest/www/lib/nusoap.php');

// Create the client instance
$client = new soapclientnusoap('http://webservices.reiwa.com/RMHPServices/ListingsService.svc', false);

// Check for an error
$err = $client->getError();
if ($err) {
    // Display the error
    echo '<h2>Constructor error</h2><pre>' . $err . '
';// На данный момент вы знаете, что следующий вызов завершится неудачей} // Вызовите метод SOAP $ result = $ client-> call ('getListingDetail', '3000975«);// Проверка на наличие ошибки if ($ client-> fault) {echo '

Fault

';
    print_r($result);
    echo '
';} else {// Проверка на ошибки $ err = $ client-> getError ();if ($ err) {// Показать ошибку echo '

Error

' . $err . '
';} else {// Показать результат echo '

Result

';
        print_r($result);
    echo '
';}} // Показать запрос и ответ echo '

Request

';echo '
' . htmlspecialchars($client->request, ENT_QUOTES) . '
';echo '

Response

';echo '
' . htmlspecialchars($client->response, ENT_QUOTES) . '
';// Показать сообщения отладки echo '

Debug

';echo '
' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '
';?>

См. Здесь: http://www.realtywest.com.au/listings/test.php на этот раз ошибка действия не поддерживается. Запрос, отправленный во втором сообщении, был скопирован из пользовательского интерфейса SOAP, где я могу получить результаты, поэтому я знаю, что веб-сервис действительно работает ..

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

1 Ответ

0 голосов
/ 24 декабря 2010

Попробуйте установить кодировку в utf-8. nusoap по умолчанию ISO-8859-1. Я не разработчик php, но некоторое время назад я сделал wcf.net для php, и с этим столкнулся.

$wsdl="http://webservices.reiwa.com/RMHPServices/ListingsService.svc?wsdl";
$client=new soapclient($wsdl, 'wsdl');
$client->soap_defencoding = 'utf-8';//default is 
$client->response_timeout = 60;//seconds

//paramaters to the webservice
$param=array('ListingNumber' => 3000975);

//the function within the service to call
$result = $client->call('getListingDetail', $param);
...