繁体   English   中英

Web服务-PHP Zend(空白页-无错误)

[英]Web Service - PHP Zend ( Blank Page - No Errors )

我做了一个简单的代码版本。 它没有错误,但是根本不起作用。 (我为PHP启用了Soap)

具有功能的类:(Metodo.php)

class Teste {


    /*
    * @return string
    */
    function SayHello() {
        return "Hello, WORLD";
    }

}

服务器: (Server.php)

<?php

require_once('Metodo.php');

if($_SERVER['QUERY_STRING'] == "wsdl") {

    try {

        require_once('Zend/Soap/AutoDiscover.php');
        $wsdl = new Zend_Soap_AutoDiscover();
        $wsdl->setClass('Teste');
        $wsdl->handle();

    }catch(exception $e) {
        echo $e->getMessage();
    }

} else {

    $wsdl_url = sprintf('http://%s%s?wsdl', $_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']);

    require_once('Zend/Soap/Server.php');
    $server = new SoapServer($wsdl_url);
    $server->setClass('Teste');
    $server->handle();

}

?>

客户端: (Client.php)

<?php

    require_once('Zend/Soap/Client.php');
    $wsdl_url = "http://localhost:8090/WebService/Server.php?wsdl";
    $client = new Zend_Soap_Client($wsdl_url);

    try {
        echo $client->SayHello();
        echo ":)";
    } catch (SoapFault $e) {
        echo $e->getMessage();
    }

    ?>

它只打印“ :)”,没有错误,但是不会调用方法SayHello()。 如果有人能帮助我,我将非常感激。 真。 非常感谢。

一些东西:

$server = new SoapServer($wsdl_url);

应该:

$server = new Zend_Soap_Server($wsdl_url);

它可能无法运行,但是由于您之前在Zend Soap Server类中需要,因此最好使用它。

在Server.php中:

$wsdl_url = sprintf('http://%s%s?wsdl', $_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']);

确保此URL包含正确的端口(与使用端口8090相同)。 如果不使用HTTP_HOST,我就不记得了。

然后最重要的是,在您的课堂上:

/*
* @return string
*/
function SayHello() {
    return "Hello, WORLD";
}

应该:

/**
* @return string
*/
function SayHello() {
    return "Hello, WORLD";
}

注意注释开头的多余的*。 自动发现类使用PHPDoc块工作,该块必须以/ **开头才能生效。 (容易错过!)

如果在完成这些更改后它仍然不起作用,请绝对确保PHP尚未缓存不良的WSDL文件(默认情况下,PHP会缓存WSDL文件)。 最简单的方法是从/ tmp /文件夹(或系统上的等效文件)中删除所有以'wsdl'开头的文件。 进行这些更改后,我使用您的代码获得了正确的输出。

在某个地方记录错误。 检查服务器和PHP日志。 SOAP客户端还有一些“跟踪/调试”设置。 如果启用了这些功能,您可能会获得有关上一次呼叫/响应的更多信息。

在没有更多信息的情况下,有一些观察结果:

  • 非标准函数名称。 在ZF中,camelCase是规范。
  • 非标准端口,不确定为什么但可能相关

您是否尝试过使用浏览器访问WSDL? 它解决了吗?

freenodes的#zftalk频道(IRC)也是很好的资源。 如果您在此处找到答案,请发回此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM