Zend SOAP服务器,非wsdl模式:位置和uri是什么

时间:2013-08-16 17:16:29

标签: php zend-framework soapserver

我正在尝试在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参数。

提前致谢!

1 个答案:

答案 0 :(得分:0)

根据Zend documentation for Zend_Soap_ServerSoapClient documentation,'uri'选项在两种情况下都指定SOAP uri命名空间。 确保在服务器和客户端中将两个“uri”选项设置为相同的值,这不是示例中的情况。

SoapClient中的“location”选项应设置为在Web服务器中配置php应用程序的URL。