【发布时间】:2011-05-27 17:34:25
【问题描述】:
我有一个 PHP Web 服务已经运行了很长时间,但是在某个地方它停止了工作,我无法让它再次工作。
我得到了一些 php 页面,在其中我所做的只是定义一个带有函数的类,最后我创建了 SoapServer。
看起来像这样 -
class MyClassWS
{
function .....
function ....
}
ini_set("soap.wsdl_cache_enabled", "0");
error_log("Server after ini_set");
$soapserver = new SoapServer("MyWSDL.wsdl");
error_log("Server after new SoapServer");
$soapserver->setClass("MyClassWS");
error_log("Server after setClass");
//error_log(print_r($soapserver->getFunctions()));
try
{
$soapserver->handle();
}
catch(Exception $ex)
{
error_log("Exception!".$ex->getMessage());
}
error_log("Finished Handling",0);
就在 $soapserver->handle(); 之后代码终止,我在我的网页上得到一个模糊的“SOAP-ENV:ClientBad Request”结果。
当我从我的索引页面“require_once”这个页面时会发生这种情况,因此我可以从我的索引页面调用此类中定义的函数。
我的猜测是,也许我一直在摆弄我的 WSDL 并且不知何故它搞砸了我的 while WebService,但我尝试查看它有什么问题,但无法解决任何问题。尤其是因为这个恼人的模糊错误信息,这并没有真正的帮助。
谢谢!
【问题讨论】:
-
您是否尝试过独立运行脚本?那它有用吗?
-
是的,如果我直接导航到该页面,根据日志,它会通过最初失败的行。
-
我认为问题在于发送到页面的 Post 数据需要 WebService 页面。似乎由于某种原因,SoapServer->Handle() 考虑了一些通过 POST 发送的数据,这就是它搞砸的原因。这可能吗?
-
更新:这正是问题所在,我得到了一些解决方法来解决这个问题。虽然我觉得不太好看。我正在做的是检查帖子的内容是否包含一些我知道原始页面附带的数据,如果是,则不要处理请求。有没有更好的方法?谢谢!
标签: php web-services wsdl soapserver