El mensaje de excepción HTTPError no se muestra cuando webapi se ejecuta en el servidor en lugar de ejecutarse localmente

Tengo un webapi que se ejecuta en un servidor IIS7.5. Tiene 3 controladores, y los 3 se pueden usar para acceder al webapi desde llamadas dentro de mi aplicación.

Tuve un error en el que mi clase base para mi controlador estaba exponiendo sus funciones como públicas, en lugar de protegidas. Esto provocó que el servidor arrojara un Error interno del servidor 500 (debido a una excepción no válida lanzada "Se encontraron varias acciones que coinciden con la solicitud"). Me llevó un tiempo profundizar en esto, porque nunca activó el registro desde mi webapi. De esta discusiónaquí, Descubrí que el error que estaba ocurriendo ocurría antes de que una función Application_Error lo detectara para registrarlo. Así que agregué el siguiente código a mi global.asax de mi webapi, y ahora puedo registrar errores como este.

PERO, mi problema ahora, cuando provoco un error interno del servidor 500 exactamente como el anterior, en mi máquina local que ejecuta mi webapi, obtengo un registro exactamente como deseo verlo con el "ExceptionMessage" de "Se encontraron varias acciones que coinciden la solicitud "se explica como el motivo del error interno del servidor. Pero cuando despliegue este código exacto en el servidor y use el webapi desde allí, mi registro solo muestra "Mensaje": "Se ha producido un error" y no me muestra el "Mensaje de excepción", aunque puedo ver que la excepción es ser lanzado usando PerfView. Solo necesito poder obtener los registros de mi servidor para mostrar la misma información que muestra mi registro local.

public class ResponseExceptionTrapper : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        return base
            .SendAsync(request, cancellationToken)
            .ContinueWith(response =>
            {
                var result = response.Result;
                if (!result.IsSuccessStatusCode)
                {
                    var exceptionResult = string.Format(
                         "Response exception: \r\n Path({0}) \r\n Status({1}) \r\n",
                         request.RequestUri,
                         result.StatusCode);

                    if (result.Content != null)
                    {
                        var exceptionReadTask =
                               result.Content.ReadAsStringAsync();

                        exceptionReadTask.Wait();
                        exceptionResult += "Message:" +
                                          exceptionReadTask.Result;

                    }

                    // Do something appropriate with exceptionResult
                    exceptionResult.Log();
                }

                return result;
            }, cancellationToken);
    }
}

Ejemplo de registro del servidor:

Timestamp: 4/24/2014 12:24:40 PM
Message: Timestamp: 4/24/2014 4:24:40 PM
Message: Response exception: 
Path(http://webserver/CreditReporting/Api/RetrieveQueuedPullCreditReport) 
Status(InternalServerError) 
Message:{"Message":"An error has occurred."}

Ejemplo de registro local:

Timestamp: 4/24/2014 12:03:16 PM
Message: Timestamp: 4/24/2014 4:03:16 PM
Message: Response exception: 
 Path(http://localhost:XXXXX/Api/RetrieveQueuedPullCreditReport) 
 Status(InternalServerError)
 Message:
  {"Message":"An error has occurred.",
  "ExceptionMessage":"Multiple actions were found that match the request:
    \r\nSystem.Threading.Tasks.Task`1[
 Our.WebServices.CreditReporting.Contracts.RetrieveQueuedPullCreditReportResponse] Post

Respuestas a la pregunta(2)

Su respuesta a la pregunta