2011-05-19 203 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';这是不包括类。

相关问题