2011-04-23 14 views
14

Como ya sabe, se recomienda manejar excepciones utilizando FaultException con el servicio WCF estándar para ocultar los detalles de las excepciones. Está bien, pero tengo problemas con el servicio WCF Ria. Quiero arrojar una excepción del servicio de dominio y el cliente manejará esa excepción. Quiero evitar divulgar información confidencial de la excepción, como el seguimiento de la pila, los nombres de los métodos, etc. Si fuera el servicio WCF estándar, utilizaría la excepción FaultException, pero en el servicio Ria no funciona. No importa qué tipo de Excepción arroje del servicio de dominio, el cliente siempre obtiene DomainOperationException. ¿Hay alguna manera en que pueda lanzar una FaultException al cliente de Silverlight desde el servicio de dominio (para no revelar los detalles de la excepción real)? Por ejemplo, tengo una ventana de inicio de sesión. Cuando el botón de inicio de sesión del golpe de usuario, no debe haber varios errores de validación, tales como:Manejo de excepciones en el servicio RIA

  • nombre de usuario o contraseña no válidos
  • cuenta de usuario está bloqueada
  • La cuenta no está activada
  • etc

Quiero tener tipos de fallas para cada error que pueda ocurrir. El cliente debe verificar lo que salió mal y mostrar el mensaje de error correspondiente. Inhabilité CustomErrors pero no ayudó. Cualquier ayuda sería apreciada. Gracias

+0

muy interesante, yo estoy a la espera de las respuestas! – flayn

+1

Yo también ... :(Por cierto, puede seguir esta pregunta http://forums.silverlight.net/forums/t/226768.aspx <- aquí también – Davita

Respuesta

11

Esto es lo que Colin Blair respondió a mi pregunta here

El DomainService tiene una método reemplazable llamado OnError. Siempre que sea una excepción dentro del DomainService (no dentro del código WCF ), la excepción se pasará a 0Ea OnError antes de que vuelva a ser devuelta al cliente. Si reemplazar la excepción en el DomainServiceErrorInfo transferirse al método OnError con su propio excepción entonces su excepción será el que se envía de vuelta al cliente. Si utiliza la excepción DomainException para su excepción , podrá pasar un entero ErrorCode que puede usar del lado del cliente para determinar el error real .

Responde mi pregunta y necesidades. Gracias Colin. ejemplo

+1

Nuevo enlace es http://social.msdn.microsoft .com/Foros/es-ES/silverlightwcf/thread/f6fc6e4e-f81d-4988-956d-98a81862335c / –

0

Código: pregunta

[EnableClientAccess()] 
public class YourDomainService : DomainService 
{ 
    protected override void OnError(DomainServiceErrorInfo errorInfo) 
    { 
      base.OnError(errorInfo); 

      customErrorHandler(errorInfo.Error); 
    } 

    private void customErrorHandler(Exception ex) 
    { 
      DomainServiceContext sc = this.ServiceContext; 

      //Write here your custom logic handling exceptions 
    } 
}