2011-03-17 2 views
4


Я пытаюсь бросить исключение из модуля WCF в клиентском модуле. Я получаю следующее сообщение об ошибке "FaultException было необработанное пользователем"бросать исключение из WCF

на стороне службы

public IList<UserEntity> SearchUserDetail(string userName) 
{ 
    try 
    { 
     int y = 0; 
     int u = 9/y; 
     return new UserViewModel().SearchUserDetail(userName); 
    } 
    catch (Exception ex) 
    { 
     throw new FaultException(
     new FaultReason(ex.Message),new FaultCode("Data Access Error")); 
    }     
} 

на стороне клиента

try 
{    
    ServiceReference.ServiceClient servRef = new ServiceReference.ServiceClient(); 

    List<UserEntity> users = new List<UserEntity>(); 
    users.AddRange(servRef.SearchUserDetail("Jacson")); 
    dataGridView1.DataSource = users;    
} 
catch (System.ServiceModel.FaultException exc) 
{ 
    Logging.Log(new Exception("Search User", exc)); 
} 

В app.config из в сервисном модуле я добавил следующий атрибут

serviceDebug includeExceptionDetailInFaults="True" 

Кто-нибудь знает решение?

+0

Код служебной стороны. Если вы не регистрируете данные (что я не вижу, что вы есть), такой повторный метадатчик исключений заставит ваше приложение усложняться для отладки. Вы в основном отбрасываете трассировку стека. Не делай этого. Или, если вы это сделаете, запишите его первым. –

ответ

4

Вы должны добавить FaultContractAttribute к методу SearchUserDetail, если он имеет OperationContractAttribute и является частью вашего класса ServiceContract.

[ServiceContract] 
interface IMyServiceContract 
{ 
    [OperationContract] 
    [FaultContract(typeof(...)] 
    IList<UserEntity> SearchUserDetail(string userName) 
} 

Я не уверен в типе FaultContract. Но посмотрите на msdn.

1

Я знаю, что путь поздно здесь, но только в том случае, кто натыкается на это, у меня была такая же ошибка и все было в порядке в моем коде.

Оказалось, что это произошло только в среде Visual Studio из-за некоторых параметров отладки. См. here для пояснения.

Смежные вопросы