解析WSDL:无法绑定到服务

问题描述 投票:2回答:1

当前,我正在尝试与基于SOAP的摄像头系统接口以绑定到其动作API,以便我可以控制其灯光何时以编程方式点亮等等。但是,当我使用下面的代码时,它表示它无法绑定到该服务,并且似乎无法正确提取与该API相关联的WSDL文件,可以在此处找到:

http://www.axis.com/vapix/ws/action1/ActionService.wsdl

我的代码是否有问题,或者这是WSDL文件本身的问题?预先非常感谢您的协助!预先,在构造函数中SoapClient对象实例化时会生成以下错误:

SOAP错误:解析WSDL:无法绑定到服务

<?php
/**
 * The purpose of this class is to act as a means to interface with a Vapix camera
 * using SOAP requests so that events may be broadcast to it.
 */

$vapix = new Vapix("http://www.axis.com/vapix/ws/action1/ActionService.wsdl",
                   "<http://camera.address.edu>",
                   "<username>", "<password>");
if ($vapix)
{
    echo "Connection to VAPIX successful!\n";
}
else
{
    echo "Connection to VAPIX unsuccessful!\n";
}

/**
 * The constructor takes in a WSDL address, the actual interfacing address of the
 * server we are connecting to, a username, and a password, and establishes the
 * SOAP client we need to interface with said address.
 *
 * @param   $wsdl       The WSDL specification for the service we are interacting with.
 * @param   $address    The actual server address we are interfacing with.
 * @param   $username   The username we need to access the server.
 * @param   $password   The password we need to access the server.
 *
 * @return              New Vapix object ready to interface with SOAP service.
 */
class Vapix
{
    // the soap client variable we will be using to store our Vapix connection
    private $soapClient;

    public function __construct($wsdl, $address, $username, $password)
    {
        try
        {
            $soapClient = new SoapClient($wsdl, array("soap_version" => SOAP_1_2));
        }
        catch (SoapFault $fault)
        {
            echo "Error instantiating SOAP object!\n";
            echo $fault->getMessage() . "\n";
        }

        // prepare SOAP headers
        $sh_param = array(
            "username" => $username,
            "password" => $password
        );

        $headers = new SoapHeader($address, "UserCredentials", $sh_param);


        // prepare SOAP client
        $soapClient->__setSoapHeaders(array($headers));
    }

    /**
     * This function is a generalized function used for calling a SOAP request to
     * whatever service or server we are linked up to (in this case a VAPIX camera)
     * so that other more specialized functions can derive from it. It will take in
     * the name of the function, as well as a list of parameters.
     *
     * @param   $funcName   The name of the function we want to call.
     * @param   $parameters The parameters for the function we want to call.
     *
     * @return  $info       Returns info from the call if successful, NULL otherwise.
     */
    public function callSoapFunction($funcName, $parameters)
    {
        try 
        { 
            $info = $soapClient->__call($funcName, array($parameters)); 
        } 
        catch (SoapFault $fault) 
        {   
            print( 
                "alert('Sorry, blah returned the following ERROR: " . $fault->faultcode . "-" .
                    $fault->faultstring.". We will now take you back to our home page.'); 
                window.location = 'main.php';"
            ); 

            return NULL;
        }

        if ($error == 0) 
        {        
            return $info;
        }
    }
}
?>
php soap wsdl vapix
1个回答
4
投票

至少提供的WSDL文件在<service>块之后,在wsdl定义的末尾没有<binding>区域。但是需要这个缺少的<service>块,因为它包含具体的服务特定信息(例如,此处列出了其Web服务URL /端点)。

© www.soinside.com 2019 - 2024. All rights reserved.