My vote is to either return an empty string, or return an XML string that can execute with XMLTOCUROSOR() but it creates a cursor with one field called Error which is a memo field and contains the error (or more records for more than one error), so that if any non-empty string is returned, it is XML, always works with XMLTOCURSOR(), and when the cursor is created, you can check FIELD(1)=="ERROR" and if so, an error occured and all error info is in that table (more fields can exist in the table if needed, otherwise it would be a valid return.
Under no circumstances should an empty or invalid query result in a COM error which surfaces the VFP error handler, this would require full error handling enabled any time the XML Web service was called, rather than just simple code checking either the return string or the XML result (the cursor created), without having to set or modify any ON ERROR handler just to call a method.