已发送带有WSDL抛出头的PHP SOAP扩展
承认这个问题已经被问了很多次,我还没有找到一个与我的情况接近的解决方案,我别无选择,只能提出我自己的问题 下面是我编写的一个简单类,我通过php2wsdl库将其转换为wsdl文件已发送带有WSDL抛出头的PHP SOAP扩展,php,web-services,soap,wsdl,Php,Web Services,Soap,Wsdl,承认这个问题已经被问了很多次,我还没有找到一个与我的情况接近的解决方案,我别无选择,只能提出我自己的问题 下面是我编写的一个简单类,我通过php2wsdl库将其转换为wsdl文件 class MyClass { /** * Adds two numbers. * * @soap * * @param float $p1 * @param float $p2 * @return float */ public function getSum($
class MyClass
{
/**
* Adds two numbers.
*
* @soap
*
* @param float $p1
* @param float $p2
* @return float
*/
public function getSum($num1, $num2){
return $num1 + $num2;
}
}
由于格式问题,我在下面添加了一个wsdl文件的图像,我可能会在这里键入它,因此我深表歉意:
我有一个客户,我查询这项服务,但我不知道我做错了什么。我知道所有现有的库,比如Zend_AutoDiscovery等等,但我真的很想从零开始理解PHP Soap背后的概念
require_once __DIR__ . '/../../../php2wsdl.php';
ini_set('default_socket_timeout', 600);
try {
$client = new \SoapClient(__DIR__ . '/../input/myclass.wsdl', array(
'connection_timeout'=>5,
'trace'=>true,
'soap_version'=>SOAP_1_2
));
$myClass = new \MyClass();
/* var_dump($client->__getFunctions());
exit();*/
$result = $client->__soapCall('getSum', array('MyClass' => $class, 'num1' => 17, 'num2' => 5));
printf("Result = %s\n", $result);
} catch (Exception $e) {
printf("Message = %s\n",$e->__toString());
}
警告:未捕获的SoapFault异常:[HTTP]获取D:\web\webserv bundle\web\services\process\myclass_client.php中的HTTP头时出错:19堆栈跟踪:#0[内部函数]:SoapClient->u doRequest('http://localhos...“,”…”,2,0)#1d:\web\webserv bundle\web\services\process\myclass_client.php(19):SoapClient->_soapCall('getSum',Array)#2d:\web\webserv bundle\web\services\index.php(3):在第19行的D:\web\webserv bundle\web\services\process\myclass\u client.php中抛出一次('D:\web\webserv-…')#3{main}
您应该增加套接字超时 在php.ini文件中
default_socket_timeout = 480
也更改为1
'trace'=>1
希望它能帮助你:)
好的,您需要3个文件:
soap服务器: webserv bundle/web/services/index.php
<?php
class MyClass
{
public function getSum($num1, $num2){
return $num1 + $num2;
}
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("http://path_to_your_wsdl");
$server->setClass("MyClass");
$server->handle();
然后在浏览器中-这个调用是否应该保持$client->\uuuSOAPCall(…)?也许我不理解整个问题,但试试这个:$client=new\SoapClient(…)$结果=$client->getSum(17,5);var_dump($结果);基本上,我正在以WSDL模式测试PHP提供的SOAP类。wsdl文件不是手工生成的,而是在Composer中作为“php2wsdl/php2wsdl”提供的库。现在的问题是使用PHP SOAP客户机类测试此wsdl文件,如图所示,主要问题是类中有一个方法可以计算作为参数传递的2个数字。如何在考虑自定义类的情况下使用PHP SOAP中的客户机类测试WSDL文件?如果没有适当的解释,仅仅发布代码是不值得的。谢谢。一旦我弄明白了,我会给你回电话的。我为我的拙劣解释道歉。
<?php
class MyClass
{
public function getSum($num1, $num2){
return $num1 + $num2;
}
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("http://path_to_your_wsdl");
$server->setClass("MyClass");
$server->handle();
<?php
$client = new SoapClient(
"http://path_to_your_wsdl",
array( 'soap_version' => SOAP_1_2)
);
var_dump($client->getSum(55,4));