I also had the same problem. I can return the response body, but everything else, status code, headers, etc. Overridden somewhere along the line.
To get around this, you can throw a WebFaultException, which allows you to set a status code.
throw new WebFaultException<string>("Tell the calling client what went wrong", System.Net.HttpStatusCode.Conflict);
source
share