当前,我正在尝试与基于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;
}
}
}
?>
至少提供的WSDL文件在<service>
块之后,在wsdl定义的末尾没有<binding>
区域。但是需要这个缺少的<service>
块,因为它包含具体的服务特定信息(例如,此处列出了其Web服务URL /端点)。