Tag Archives: wcf

WCF: Auditar errores a nivel de servidor


Windows Comunication Foundation (WCF) fue la evolución lógica de los antiguos Web Services de .NET 2.0 dotando a estos de multiples mejoras.

Aunque hoy en día se ha convertido en el estandar de uso para el desarrollo de servicios webs centralizados en .NET hay algunas cosas que Microsoft no terminó de pulir o complicó más de la cuenta.

Una de ellas es la captura de excepciones que ocurran en el servidor que aloja el WCF cuando es invocado desde un cliente en concreto y en este pequeño artículo vamos a explicar como configurar el servicio WCF para que audite los errores ocurridos.

 

Las típicas excepciones a nivel de cliente como “An unsecured or incorrectly fault error” o “An error occurred when verifying security for the message” realmente esconden el verdadero motivo del error y el único modo de saberlo es indicarle al servicio WCF que inserte en el Visor de Sucesos de Windows los detalles de la excepción usando “Service Security Audit“.

Para ello necesitaremos modificar el Web.Config añadiendo en el tag <behavior> el tag <serviceSecurityAudit> como en el ejemplo:

<behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
<serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" suppressAuditFailure="true"/>
        </behavior>
      </serviceBehaviors>     
    </behaviors>

Los parámetros de “serviceSecurityAudit” son:

  • auditLogLocation:
    • Define dónde se almacenará el log del WCF.
    • Tipos:
      • Default
        • Los eventos se escriben en el Visor de Sucesos.
      • Application
        • Los eventos se escriben en el Visor de Sucesos de “Application”
      • Security
        • Los eventos se escriben en el Visor de Suscesos de “Security”
  • serviceAuthorizationAuditLevel y messageAuthenticationAuditLevel
    • Indica si se van a auditar los eventos de autorización y autenticación respectivamente contra el WCF.
    • Tipos:
      • None
        • No se almacena nada.
      • Success
        • Sólo las peticiones exitosas.
      • Failure
        • Sólo los errores.
      • SuccessAndFailure
        • Se almacena todo.
  • suppressAuditFailure
    • Valor booleano que indica si se ignoran o no las posibles excepciones que ocurran al intentar escribir en el log (la típica excepción guardando la excepción). Por defecto si se falla al intentar guardar la excepción esta es capturada e ignorada.
 
Si, como en mi caso, queremos saber solo cuando falla basta con que pongamos los valores a “Failure” y tendremos una entrada en el Event Viewer de nuestro servidor con el texto completo y real de la excepción.

 

IMPORTANTE: Activar el Service Security Audit reduce considerablemente el rendimiento del servicio WCF. Mi recomendación es que se desactive si ya has resuelto el error o si no necesitas auditar nada más.

 

Espero que este pequeño tutorial os ayude a encontrar esos horribles errores ocultos en vuestros servicios WCF.

 

Nos vemos Compilando!!