Como obter informações de exceção ao chamar o serviço da Web JSON

No .NET 3.5, eu tinha o seguinte código:

[WebService(Namespace = "http://kitchenpc.com/schemas/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class KitchenPC : System.Web.Services.WebService
{
   [WebMethod]
   public LogonResult Logon(string username, string password)
   {
      //If username and password are not valid...
      throw new InvalidUsernameOrPasswordException();
   }
}

Quando eu chamaria, se eu passasse um nome de usuário e senha inválidos,InvalidUsernameOrPasswordException seria lançado e eu poderia pegar a exceção em JavaScript, olhando paraerror.get_exceptionType(). Isso ocorre porque o serviço da Web serializaria as informações de exceção no JSON.

No entanto, uma vez que eu atualizei para o .NET 4.5, isso quebrou. Agora, quando eu passo um nome de usuário e senha inválidos, recebo a resposta HTTP:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
jsonerror: true
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 24 Nov 2012 22:42:33 GMT
Content-Length: 91

{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}

Basicamente, o tipo de exceção é perdido e substituído por uma mensagem de erro genérica.

O que causou esse comportamento para alterar e ainda há uma maneira de retornar informações de exceção em JSON? Praticamente toda a minha API foi projetada para confiar nesse comportamento.

questionAnswers(2)

yourAnswerToTheQuestion