我的生产服务器(远程服务器)上的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" );
}
有了它,它确实有效!但我确信这不一定是解决问题的方法......
答案 0 :(得分:0)
看起来你的wsdl开头有一个无效的字符。也许是一个空间?