2011-11-11 74 views
1

我在我的生产服务器(远程服务器)上在PHP上实现的Soap服务器出现问题。PHP SoapServer:无法解析XML(WSDL文件) - 无XML文件 - 在URL上使用“?wsdl”

我已经实现了一个简单的SOAP服务器(原生PHP类),只是在WSDL模式下的函数。

所以我的代码如下所示:

ini_set("soap.wsdl_cache_enabled", "0"); 

$server = new SoapServer("wsSeguimiento.wsdl"); 

$server->addFunction("ResultadoDetalleExtendido"); 

$server->handle(); 

现在,你知道,当你调用通过Web浏览器的服务器如URL的“http://localhost/soapserver/wsServer.php”你有一个空白页 - 在我的情况下 - 或者你编程的任何东西(服务器代码)。

但是,如果你在最后的“http://localhost/soapserver/wsServer.php?wsdl”中调用了与“?wsdl”相同的URL,那么服务器(我猜想的句柄函数)会解析XML wsdl on Web浏览器,所以你得到一个text/xml内容类型,你可以看到XML定义本身。

现在,它适用于我的开发环境。没问题。 我已经创建了一个Soap客户端来测试我自己的服务器,并查看它是否会返回已耗尽的响应,并且一切正常。 但是,当我将代码上传到生产服务器时,它不起作用。

Firefox在“?wsdl”调用中显示URL,典型的错误是“XML malformed”,但在这种特殊情况下,它从一开始就像是根本没有XML文件。 如果我用我的客户,我得到的错误:

SOAP的错误:解析WSDL:“?://.../SOAP_SERVER/seguimientoServer.php WSDL HTTP”:无法从加载开始标记预计'<'找不到

我已经正确更改了WSDL XML文件中的名称空间和URL。所以它必须正常工作。但事实并非如此。

我发现有与HTTP头本身有关的现有缺陷,基于分块数据,内容长度,X-通电通过,无论...

但我没有看到一个解决方案。

我已经做了在此基础上我的服务器上的一个小黑客(手柄()调用之后):

if(isset($_REQUEST['wsdl'])) 
{ 
    ob_clean(); 
    echo file_get_contents("wsSeguimiento.wsdl"); 
} 

而与此,它真的有效!但我敢肯定,这并不一定是解决问题的方法...

回答

0

貌似在您的WSDL的开头无效字符。也许是一个空间?

+0

不......不是。它对我的Apache环境开发非常有用。但它不适用于生产Apache,并且我在XML的开始阶段没有改变...... :( – Lightworker