簡體   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