我正在尝试在PHP中为Zend框架创建一个web服务控制器。我正在使用非WSDL模式(虽然我认为如果归结为它,我可以构建一个WSDL文件)。
class WebserviceController extends Zend_Controller_Action
{
public function soapAction()
{
$this->getHelper('viewRenderer')->setNoRender(true);
$soap_options = array('uri'=>$_SERVER['DOCUMENT_ROOT'] . 'webservice/soap/');
echo $soap_options;
$server = new Zend_Soap_Server( null, $soap_options );
$server->setClass('WebserviceAPI');
$server->handle();
}
}
WebserviceAPI是一个普通的对象:
class WebserviceAPI
{
public function returnblah($one, $two)
{
return $one . ", " . $two . ": blah!";
}
}
我正在尝试测试这只是为了看看我是否可以连接它:
$options = array('login' => '***',
'password' => '********',
'location' => 'https://localhost:8888/webservice/soap',
'uri' => 'https://localhost:8888/',
'trace' => 1);
$soap = new SoapClient(null, $options);
echo $soap->returnblah("a-one", "a-two");
它没有连接。事实上,我不确定Zend SOAP服务器的正确位置和uri应该是什么,当它以非WSDL模式构建时。关于如何连接到以这种方式构建的Zend SOAP服务器的文档并不清楚。
ETA:我已经包含了登录名和密码,以防身份验证是它没有连接的原因(虽然我怀疑它甚至没有达到那么远)。
ETA2:这是实际的错误消息:
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /Users/sabrina/Documents/testws2.php:28
其中第28行是对$ soap-> returnblah()的实际调用。 (我在这里发布的代码省略了很多我试图解决这个问题的评论。)
我开始怀疑我的实际连接问题可能是SOAP客户端试图通过http发送https请求,所以我正在努力解决这个问题,但知道我是否仍然有用使用正确的位置和uri参数。
提前致谢!
答案 0 :(得分:0)
根据Zend documentation for Zend_Soap_Server和SoapClient documentation,'uri'选项在两种情况下都指定SOAP uri命名空间。 确保在服务器和客户端中将两个“uri”选项设置为相同的值,这不是示例中的情况。
SoapClient中的“location”选项应设置为在Web服务器中配置php应用程序的URL。