Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已发送带有WSDL抛出头的PHP SOAP扩展_Php_Web Services_Soap_Wsdl - Fatal编程技术网

已发送带有WSDL抛出头的PHP SOAP扩展

已发送带有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($

承认这个问题已经被问了很多次,我还没有找到一个与我的情况接近的解决方案,我别无选择,只能提出我自己的问题

下面是我编写的一个简单类,我通过php2wsdl库将其转换为wsdl文件

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个文件:

  • 使用MyClass的soap服务器
  • wsdl
  • soap客户端

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