-1

我是编程领域的新手,这是我的第一个 nusoap-0.9.5 客户端和服务器程序。尽管服务器看起来正确,但客户端一直给我这个警告:

PHP Fatal error:  SoapClient::SoapClient(): Invalid parameters in /var/www/client.php on line 5
PHP Fatal error:  Uncaught SoapFault exception: [Client] SoapClient::SoapClient(): Invalid parameters in /var/www/client.php:5
Stack trace:
#0 /var/www/client.php(5): SoapClient->SoapClient('http://localhos...', true)
#1 {main}
  thrown in /var/www/client.php on line 5

有人知道原因吗?一个多星期以来,我一直在尝试通过网络找到解决方案,但我无法理解我的程序有什么问题,为什么它无法正常工作。

客户端代码:

再次感谢戴维,我已经阅读了您推荐的所有教程,但我仍然有点困惑,但至少比以前不那么困惑了。我再次修改了我的代码,我希望它现在更有意义。所以这里是:

<?php

include "conf_client.php";

require_once('nusoap.php');

$client = new soapclient('http://localhost:8048/server.php?wsdl',true);

class Data {

  public $acro = acro;

  public $note = note;

  public $prio = prio;

  public $date = date;

  public function Delete() {

    $create = array ($acro,
                     $date,
                     $note,
                     $prio);

    return $create;

  }// End of Function Delete

}// End of class Data

$data = new Data();

$delete = $data->Delete();

$response = $client->call('Lists.DeleteToDo',$delete);

var_dump($response);

?>

目录:{file:///var/www/server.php}

任何帮助深表感谢。

'List.DeleteToDo' 是类:列表和功能:我正在调用的服务器端的 DeleteToDo。

4

2 回答 2

1

我设法找到更多关于我的问题的信息并且我已经解决了。我在这里发布我的服务器代码,也许它也可以帮助其他人。

作为一个初学者,我已经尽可能地简化了代码。我的答案不包括配置文件,但如果有人需要它,请告诉我,我也会发布它。

我还要感谢所有在这个论坛上回答我的问题并帮助我理解我的错误的人。

<?php
include "conf.php";
require_once('nusoap/lib/nusoap.php');
$server = new soap_server();
$server->configureWSDL('This is my First nuSoapServer', 'urn:nuSoapServer');
$server->wsdl->addComplexType('Data',
              'compexType',
              'struct',
              'all',
              '',
              array('id' => array('name' => 'id', 'type' => 'xsd:int'),
                'acro' => array('name' => 'acro', 'type' => 'xsd:string'),
                'time' => array('name' => 'time', 'type' => 'xsd:string'),
                'date' => array('name' => 'date', 'type' => 'xsd:string'),
                'note' => array('name' => 'note', 'type' => 'xsd:string'),
                'prio' => array('name' => 'prio', 'type' => 'xsd:int'),
                'data' => array('name' => 'data', 'type' => 'xsd:string')
                )
              );
$server->wsdl->addComplexType(
              'DataArray',    // Name
              'complexType',    // Type Class
              'array',          // PHP Type
              '',               // Compositor
              'SOAP-ENC:Array', // Restricted Base
              array(),          // Elements
              array(            // Atributes
                array('ref' => 'SOAP-ENC:arrayType',
                  'wsdl:arrayType' => 'tns:Data[]')
                    ),
              'tns:Data'
              );
$server->register('GetTodoList',                 // method name
      array('acro' => 'xsd:string'), // input parameters
      array('DataResult' => 'tns:DataArray'), // output parameters
      'urn:nuSoapServer',                     // namespace($namespace)
      'urn:nuSoapServer#GetTodoList',         // soap action
      'rpc',                         // style
      'encoded',                     // use
      'Return Get to do list');  // documentation
function GetMyConnection() {

global $InputArray;

$dbase_link = mysql_connect($InputArray['host'],$InputArray['mysql_user'],$InputArray['mysql_password']);

//check if connected
if (!$dbase_link) {
  die("Can not connect: " . mysql_error());
}

//return $this->myconn;

//http://se1.php.net/manual/en/function.mysql-create-db.php
$dbase_select = mysql_select_db($InputArray['mysql_dbase']);

if (empty($dbase_select)) {
  $sql = "CREATE DATABASE IF NOT EXISTS ".$InputArray['mysql_dbase']."\n";

  if (mysql_query($sql)) {
    echo "Database: " . $InputArray['mysql_dbase'] . " was created succesfully\n";
  }
  else {
    echo "Error creating database: " . mysql_error() . "\n";
  }
}

$dbase_select = mysql_select_db($InputArray['mysql_dbase']);

$sql = "CREATE TABLE IF NOT EXISTS ".$InputArray['mysql_dbase_table']." (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `acro` varchar(25) NOT NULL,
        `time` varchar(25) NOT NULL,
        `date` varchar(25) NOT NULL,
        `note` varchar(1024) NOT NULL,
        `prio` int(11) NOT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$create = mysql_query($sql);

if (!$create) {
  echo "Error creating table: " . mysql_error() . "\n";
}

}// End of Function GetMyConnection

function closeConnection() {

  $terminate = mysql_close();

  if ($terminate) {
    echo "Connection terminated\n";
  }
  else {
    echo "Error terminating connection: " . mysql_error() . "\n";
  }
}//End of function closeConnection
// create the function

function GetTodoList($acro) {

  global $InputArray;

  GetMyConnection();

  if (!$acro) {
    return new soap_fault('Client', '', 'No data received!');
  }

  else {  
    $dbase_select = mysql_select_db($InputArray['mysql_dbase']);

    $get =  mysql_query("SELECT * FROM " . $InputArray['mysql_dbase_table'] . " WHERE `acro` = '" . $acro . "'");

    if($get === FALSE) {
      echo "Could not retrieve data from: " . $InputArray['mysql_dbase_table'] . " due to: " . mysql_error() . "\n";
    }

    else {
      while($total = mysql_fetch_array($get)) {
    $Data[] = array('id' => $total['id'],
        'acro' => $total['acro'],
        'time' => $total['time'],
        'date' => $total['date'],
        'note' => $total['note'],
        'prio' => $total['prio']);
    }
   }
  }
 return $Data;
 closeConnection();
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
exit();
?>
于 2013-11-14T23:29:45.620 回答
0

您的 SOAP URL 正在尝试访问本地文件路径而不是 URL

如果您在浏览器中打开您指定的 URL,您应该会返回一个(可能很大的)XML 块。我几乎可以保证,除了 404 错误,你什么也得不到

对于 SOAP 连接,您必须使用网络服务器指定的 URL,而不是本地文件路径(除非您替换http://file:///- 可能有效)。

如果您的网络服务器公开了一个 URL(例如,http://localmachine)并且 WSDL 托管在一个子文件夹(例如,soapstuff)中,那么您需要输入该$client=new soapclient行的 URL 类似于http://localmachine/soapstuff?wsdl

于 2013-10-31T11:14:26.397 回答