繁体   English   中英

PHP SoapServer:无法解析XML(WSDL文件)-没有XML文件-URL上带有“?wsdl”

[英]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.

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