PHP SoapServer:不解析XML(WSDL文件) - 没有XML文件 - 在URL上使用“?wsdl”

时间:2011-11-11 12:19:42

标签: php xml wsdl soapserver

我的生产服务器(远程服务器)上的PHP上实现的Soap Server出现问题。

我在WSDL模式下只使用on函数实现了一个简单的Soap Server(本机PHP类)。

所以我的代码如下:

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

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

$server->addFunction("ResultadoDetalleExtendido");

$server->handle();

现在,正如您所知,当您通过网络浏览器使用“http://localhost/soapserver/wsServer.php”之类的网址调用服务器时,您会看到一个空白页面 - 在我的情况下 - 或者您的任何内容在那里编程(服务器代码)。

但是如果你在“http://localhost/soapserver/wsServer.php?wsdl”末尾用“?wsdl”调用相同的URL,那么服务器(我猜的句柄函数)会解析XML上的wsdl Web浏览器,因此您获得text / xml内容类型,您可以看到XML定义本身。

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

Firefox在网址上显示“?wsdl”调用,这是典型的错误,说“XML格式错误”,但在这种特殊情况下,它从一开始就像没有XML文件一样。 如果我使用我的客户端,我会收到错误:

SOAP-ERROR:解析WSDL:无法从'http://.../SOAP_SERVER/seguimientoServer.php?wsdl'加载:期望开始标记,'<'找不到

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

我发现存在与HTTP标头本身相关的现有错误,基于分块数据,内容长度,X-powered-by,等等......

但我没有看到解决方案。

基于此(在handle()调用之后)我在我的服务器上做了一点黑客攻击:

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

有了它,它确实有效!但我确信这不一定是解决问题的方法......

1 个答案:

答案 0 :(得分:0)

看起来你的wsdl开头有一个无效的字符。也许是一个空间?