Drupal Services Bad request
Ok it seems I'm implementing it wrong. 
The SoapServer::handle() source code shows why:

 if (SG(request_info).request_method &amp;&amp;
        strcmp(SG(request_info).request_method, "GET") == 0 &amp;&amp;
        SG(request_info).query_string &amp;&amp;stricmp(SG(request_info).query_string, "wsdl") == 0) {.....


the Get parameter must be wsdl, which Drupal rewrites.
Also in essence using the SoapServer drupal module you get around this.
references to implement this properly:

example
More info
Soap server module