2013-10-31 4 views
-1

프로그래밍 영역을 처음 접했고 이것이 nusoap-0.9.5 클라이언트 및 서버 프로그램의 첫 번째 프로그램입니다. 서버가 올바른 것처럼 보이지만 클라이언트는 계속이 경고를 제공합니다.nuSOAP의 클라이언트 서버 응용 프로그램

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 

아무도 그 이유를 알지 못합니까? 나는 1 주일 이상 인터넷을 통해 해결책을 찾고자 노력하고 있는데 왜 내 프로그램에 문제가 있는지 이해할 수 없다.

클라이언트 코드 :

다시 한번 감사 데비, 난 당신이 추천 모든 자습서를 읽고 난 아직도 조금 혼란하지만 이전보다 적어도 덜 혼란 스러워요. 내 코드를 다시 수정 했으므로 이제는 더 이해할 수 있기를 바랍니다. 그래서 여기있다 :

<?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); 

?> 

는 디렉토리

을 : {파일 : ///var/www/server.php은}

어떤 도움을 많이 감사합니다.

'List.DeleteToDo' 클래스 및 목록 : 기능 : DeleteToDo는 내가 호출 할 서버 쪽입니까? 는 SOAP에 대한

+0

이 설명해주십시오, 나는 확실하지 오전하지만 내 브라우저에 절름발이 업 - 오리 @' –

+0

을 경로는 다음과 같이 나타납니다 : 파일 : ///var/www/connection.php 여기에 다음을 추가하면 : http : //가 앞쪽에 추가됩니다. – Thanos

+0

당신은 내가 무슨 뜻인지 이해 했어. URL에 입력 : localhost/connectio.php 파일이 나를 위해 실행되었습니다. 그래서 나는 줄을 '/localhost/connection.php?wsdl'로 바꿨지 만 여전히 같은 오류가있다. 내가 지금 잘못하고있는 것. 나는 이것이 내 실수라고 생각하는 것이 혼란 스럽다.시간과 노력에 미리 감사드립니다. – Thanos

답변

1

I 같은 것으로 웹 서버 URL을 노출하는 경우

(예를 들어, http://localmachine)과 WSDL은 하위 폴더에 호스팅 (예를 들어, soapstuff는) 다음 URL이 입력해야합니다 내 문제에 대해 더 많이 찾아 관리하고 해결했습니다. 내 서버 코드를 여기에 게시하면 다른 사람에게 도움이 될 수도 있습니다.

초급자로서 가능한 한 코드를 간소화했습니다. 나는 나의 대답에 구성 파일을 포함시키지 않고있다. 그러나 누군가가 그것을 필요로하면 나에게 알려줘 라. 그러면 나는 그것을 또한 게시 할 것이다.

이 포럼에서 내 질문에 답변하고 오류를 이해하는 데 도움을 주신 모든 분들께 감사드립니다. `soapclient ('? HTTP : //var/www/connection.php WSDL', TRUE)

<?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(); 
?> 
0

귀하의 URL은 URL

당신은 당신이 XML의 (가능성이 큰) 덩어리를 다시 받아야 브라우저에서 지정한 URL을 열 경우

보다는 로컬 파일 경로를 액세스하기 위해 노력하고있다. 내가 할 수있는 당신이 웹 서버가 아닌 당신이 http:// file:///로 교체하지 않는 로컬 파일 경로 (에 의해 지정된 URL을 사용해야하는 SOAP 연결의 경우 404 오류

에서 떨어져 아무 것도 얻을 수 없을 것입니다 거의 보증 - 그 수도 작업). $client=new soapclient 라인이 http://localmachine/soapstuff?wsdl

+0

귀하의 제안에 따라 다음을 대체했습니다 : http : //var/www/connection.php? wsdl : http : //file///var/www/connection.php? wsdl 계속 하시겠습니까? 같은 오류. 이 형식이 맞습니까? 시간과 노력에 감사드립니다. – Thanos

+0

나는 단지 그것이 그것이 나타나는 것처럼 보일 뿐이다라고 말했다. 웹 서버에서 노출 된 URL을 사용하십시오. 웹 서버의 설정을 확인하여 기본 URL을 찾고 거기에서 이동하십시오. 또한 구글의 "튜토리얼"에 처음 4 가지 결과가 있다면 무엇을해야하는지에 대한 좋은 아이디어를 줄 것입니다. – DaveyBoy

+0

내가 틀 렸습니다. 나는 무엇을 의미하는지 이해했습니다. 나는 URL을 입력했습니다 : localhost/connectio.php 그리고 파일이 나를 위해 실행되었습니다. 그래서 나는 줄을 '/localhost/connection.php?wsdl'로 바꿨지 만 여전히 같은 오류가있다. 내가 지금 잘못하고있는 것. 나는 이것이 내 실수라고 생각하는 것이 혼란 스럽다. – Thanos

관련 문제