[英]PHP SoapServer: doesn't resolve XML (WSDL file) - no XML file - with “?wsdl” on URL
我在生產服務器(遠程服務器)上的PHP上實現的Soap Server出現問題。
我已經實現了一個簡單的Soap Server(原生PHP類),並且僅在WSDL模式下起作用。
所以我的代碼看起來像:
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("wsSeguimiento.wsdl");
$server->addFunction("ResultadoDetalleExtendido");
$server->handle();
現在,如您所知,當您通過Web瀏覽器以“ http://localhost/soapserver/wsServer.php”之類的URL調用服務器時,您將得到一個空白頁-就我而言-或您在那里編程的任何內容(服務器代碼)。
但是,如果您在“ http://localhost/soapserver/wsServer.php?wsdl”末尾使用“?wsdl”調用相同的URL,則服務器(我猜是句柄函數)會在網絡瀏覽器上解析XML wsdl,因此您將獲得text / xml內容類型,並且可以看到XML定義本身。
現在,它適用於我的開發環境。 沒問題。 我創建了一個Soap客戶端來測試我自己的服務器,並查看它是否返回專家響應,並且一切正常。 但是,當我將代碼上傳到生產服務器時,它不起作用。
Firefox在URL上顯示“?wsdl”調用,典型錯誤是“ XML格式錯誤”,但是在這種特殊情況下,它是從一開始就出現的,就像根本沒有XML文件一樣。 如果我使用客戶端,則會收到錯誤消息:
SOAP錯誤:解析WSDL:無法從'http://.../SOAP_SERVER/seguimientoServer.php?wsdl'加載:預期開始標記,未找到'<'
我已經正確更改了WSDL XML文件中的名稱空間和URL。 因此,它必須正常工作。 但事實並非如此。
我發現基於分塊數據,內容長度,X-by-by等,存在與HTTP標頭本身相關的錯誤。
但我看不到解決方案。
我已經根據以下內容在服務器上做了一些改動(在handle()調用之后):
if( isset($_REQUEST['wsdl']) )
{
ob_clean();
echo file_get_contents( "wsSeguimiento.wsdl" );
}
有了它,它真的有效! 但我敢肯定,這不一定是解決問題的方法...
wsdl的開頭似乎有一個無效字符。 也許是空間?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.