2011-05-19 159 views
1

編寫在NuSOAP中的我的SOAP應用程序返回http 500 (Internal Server Error)錯誤。SOAP返回「內部服務器錯誤」

它在我的本地機器上正常工作,我只在現場得到這個錯誤。

如何診斷此錯誤?

服務器:

require_once('nusoap.php'); 
// Create the server instance. 
$server = new soap_server; 
// Register the method to expose. 
// Note: with NuSOAP 0.6.3, only method name is used without WSDL. 
$server->register(
    'hello',       // Method name 
    array('name' => 'xsd:string'),  // Input parameters 
    array('return' => 'xsd:string'), // Output parameters 
    'uri:helloworld',     // Namespace 
    'uri:helloworld/hello',    // SOAPAction 
    'rpc',        // Style 
    'encoded'       // Use 
); 
// Define the method as a PHP function. 
function hello($name) { 
require_once 'classes.php'; 
$db = new Database(); 
$sql = "select * from notifications where skey = '$name'"; 
$res = mysql_query($sql); 
$row = mysql_fetch_array($res); 
    //return 'Hello, ' . $row['sales']; 
    $ret = "<salesdat> 
      <customername>". $row['sales']. "</customername> 
     </salesdat>"; 
     return $ret; 
} 
// Use the request to (try to) invoke the service. 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
$server->service($HTTP_RAW_POST_DATA); 

客戶:

// Pull in the NuSOAP code. 
require_once('nusoap.php'); 
// Create the client instance. 
$client = new soapclient('http://----my site url ---/server.php'); 
//$client = new soapclient('http://localhost/cb/server.php'); 
// Check for an error. 
$err = $client->getError(); 
if ($err) { 
    // Display the error. 
    echo '<p><b>Constructor error: ' . $err . '</b></p>'; 
    // At this point, you know the call that follows will fail. 
} 
// Call the SOAP method. 
$result = $client->call(
    'hello',      // method name 
    array('name' => 'shahidkari'), // input parameters 
    'uri:helloworld',   // namespace 
    'uri:helloworld/hello'  // SOAPAction 
); 
// Strange: the following works just as well! 
//$result = $client->call('hello', array('name' => 'Scott')); 
// Check for a fault 
if ($client->fault) { 
    echo '<p><b>Fault: '; 
    print_r($result); 
    echo '</b></p>'; 
} else { 
    // Check for errors 
    $err = $client->getError(); 
    if ($err) { 
     // Display the error. 
     echo '<p><b>Error: ' . $err . '</b></p>'; 
    } else { 
     // Display the result. 
     print_r($result); 
    } 
} 
+0

如果您有權訪問它們,請查看服務器的日誌以查看確切的錯誤。 – 2011-05-20 11:40:25

+0

在服務器日誌中,我發現「內部服務器錯誤」...並且沒有任何文件 – DingDongDev 2011-05-20 11:43:16

+5

應該有一個包含詳細消息的'error.log'文件。 – 2011-05-20 11:44:20

回答

0

這可能是由於你的服務器腳本PHP的錯誤。打開錯誤報告。在瀏覽器中運行服務器。

server.php

error_reporting(-1); 
ini_set('display_errors', 'On'); 

require_once './src/Test.php'; 
$server = new SoapServer("https://xxxx/Outbound.wsdl"); 
$server->setClass('Test'); 
$server->handle(); 

https://xxxx/server.php //調用這個在瀏覽器將拋出錯誤。

在我的情況下,這是由於require_once './src/Test.php';這是不包括類。

相關問題