1

我正在尝试为 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 服务器以非 WSDL 模式构建时,我不确定它的正确位置和 uri 应该是什么。文档并不清楚如何连接到以这种方式构建的 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 参数。

提前致谢!

4

1 回答 1

0

根据Zend_Soap_Server 的 Zend 文档SoapClient 文档,'uri' 选项在这两种情况下都指定了 SOAP uri 命名空间。确保在您的服务器和客户端中将两个“uri”选项设置为相同的值,在您的示例中并非如此。

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

于 2013-08-16T20:48:36.180 回答