2011-03-02 13 views
5

He creado un servicio de datos WCF con una operación de servicio.WCF Servicio de datos Manejo de errores

Quiero generar un tipo de excepción de negocios. Intento generar WebFaultException, pero no veo cómo detectar este error en el lado del cliente cuando se produce un error por una operación de servicio.

Aquí es mi operación de servicio para simular una excepción:

[WebGet] 
public void GenerateException() 
{ 
    throw new DataServiceException(403, "Custom Message"); 
} 

Aquí es mi cliente:

WebClient wc = new WebClient(); 
wc.DownloadString(
    new Uri(
     "http://localhost:27820/WcfDataService1.svc/GenerateException" 
    ) 
); 

DownloadString es una excepción, pero es sólo Internal Server Error, no puedo ver a mi Custom Message.

¿Alguna idea?

Muchas gracias.

+0

Hola, ¿alguna vez encontrar una solución a su problema? Estoy en la misma situación y no tengo nada:/ – Mathieu

Respuesta

3

Lo mejor es tirar un DataServiceException. El tiempo de ejecución del servicio de datos WCF sabe cómo asignar las propiedades a la respuesta HTTP y siempre lo ajustará en un TargetInvocationException.

Luego, puede desempaquetar esto para el consumidor cliente reemplazando el HandleException en su DataService así:

/// <summary> 
    /// Unpack exceptions to the consumer 
    /// </summary> 
    /// <param name="args"></param> 
    protected override void HandleException(HandleExceptionArgs args) 
    { 
     if ((args.Exception is TargetInvocationException) && args.Exception.InnerException != null) 
     { 
      if (args.Exception.InnerException is DataServiceException) 
       args.Exception = args.Exception.InnerException as DataServiceException; 
      else 
       args.Exception = new DataServiceException(400, args.Exception.InnerException.Message); 
     } 
    } 
3

Puede utilizar WCF FaultContract atributo para lanzar y manejar una excepción businzess.

Consulte Link, Example

+0

gracias por encontrar esta pregunta y luego publicar su resultado. Esto ayudó mucho. –

0

I resuelto mi error 403 usando Conjunto EntitySetAccessRule a AllRead:

  config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
Cuestiones relacionadas