In PHP5, there seem to be times when handle() doesn't "work" and complains of an Invalid Request.
This may (or may not) be only if you are using WSDL...
The root cause would seem to be that handle() expects to find the SOAP Request XML data in $HTTP_RAW_POST_DATA
However, even turning "on" always_populate_raw_post_data does not seem to fill in that variable.
Thus, you need to do like this, to snag the data from stdin and shove it into the variable handle() expects:
if (!isset($HTTP_RAW_POST_DATA)){
$HTTP_RAW_POST_DATA = file_get_contents('php://input');
}
YMMV