This question was migrated from Super User because it can be answered on Stack Overflow. Migrated四年前。Learn more。
我目前正在研究一个使用web服务PHP Nusoap的项目。我首先在本地计算机上实现它,它已经运行得很好了,它可以插入到数据库中,因为我们还将项目部署到生产服务器(LinuxRHEL4)中,所以我们还需要包含web服务。在生产服务器中实现此功能时,出现以下错误:
此服务的WSDL中未定义操作“”,以下是
详细信息:
代码如下:
client.php客户端
服务器.php
这个问题是什么意思?我们如何解决这个问题?或者如何在生产服务器中设置web服务PHP Nusoap?如有任何意见/建议,我们将不胜感激。谢谢
对于这个:
希望这能帮助别人!
我目前正在研究一个使用web服务PHP Nusoap的项目。我首先在本地计算机上实现它,它已经运行得很好了,它可以插入到数据库中,因为我们还将项目部署到生产服务器(LinuxRHEL4)中,所以我们还需要包含web服务。在生产服务器中实现此功能时,出现以下错误:
此服务的WSDL中未定义操作“”,以下是
详细信息:
<?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
<faultactor xsi:type="xsd:string"></faultactor>
<faultstring xsi:type="xsd:string">Operation '' is not defined in the WSDL for this service
</faultstring>
<detail xsi:type="xsd:string"></detail>
</SOAP-ENV:Fault>
代码如下:
client.php客户端
<?php
require_once('lib/nusoap.php');
$data = json_decode(file_get_contents("php://input"), true);
$file_name = $data['file_name'];
$location = $data['location'];
$client = new nusoap_client('http://servername:port/WebService/server.php?wsdl', true);
if ($SERVER['REQUEST_METHOD'] == 'POST') {
$err = $client->getError();
if ($err) {
echo "<h2> Constructor error </h2><pre>" . $err. "</pre>" ;
echo "<h2> Debug </h2><pre>" . htmlspecialchars($client->getdebug(), ENT_QUOTES) . "</pre>" ;
exit();
}
$datas = array (
'file_name' => $file_name,
'location' => $location
);
$result = $client->call('InsertData', $datas);
if ($client->fault) {
echo "<h2> Fault (Expect - The request contains an invalid SOAP Body)</h2> <pre>" ;
print_r ($result);
echo "</pre>";
} else {
$err = $client->getError ();
if ($err) {
echo "<h2> Error </h2><pre>" . $err. "</pre>";
} else {
print_r ($result);
}
}
} else if ($_SERVER['REQUEST_METHOD'] != 'POST') {
echo "Method is not POST " ;
}
?>
服务器.php
<?php
require_once('lib.nusoap');
$server = new soap_server();
$server->configureWSDL('Database Sample Insertion', 'urn:Insert');
$server->soap_defenconding = 'UTF-8' ;
$server->register('InsertData',
array (
'file_name' => 'xsd:file_name',
'location' => 'xsd:location'
),
array ('return' => 'xsd:string'),
'urn:Insert',
'urn:Insertwsdl#InsertDate',
'rpc',
'literal'
);
function InsertData ($file_name, $location) {
$db_host = 'localhost';
$db_username = 'username';
$db_password = '' ;
$db_name = 'sample' ;
$conn = new mysqli ($db_host, $db_username, $db_password, $db_name);
if ($conn->connect_error) {
trigger_error('Database connection failed : ' .$conn->connect_error , E_USER_ERROR);
}
$sql = "INSERT INTO transaction (`filename`, `location`) VALUES ('$file_name', '$location')";
$query = $conn->query($sql);
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '' ;
$server->service($HTTP_RAW_POST_DATA);
?>
这个问题是什么意思?我们如何解决这个问题?或者如何在生产服务器中设置web服务PHP Nusoap?如有任何意见/建议,我们将不胜感激。谢谢
最佳答案
在我的服务器上更改PHP/Apache版本时,我遇到了同样的问题。在我的案例中,问题位于nusoap库函数中:parse_http_headers()
有一个函数用于获取所有的HTTP头getallheaders()
,它似乎并没有获得所有的头。nusoap解析请求不需要Content-Type
(例如text/xml
)。
幸运的是,NUSOAP检查函数getallheaders()
是否存在,如果没有,则使用$_SERVER
数组解析标题。
最后,我要做的一件事是更改nusoap.php文件中的一行代码以禁用此函数:
if (function_exists('getallheaders')){ ...
对于这个:
if (0 && function_exists('getallheaders')){ ...
希望这能帮助别人!
07-24 15:17