1

Я использую службы WCF RIA VS2008/.NET 3.5 и пытаясь обрабатывать исключения. Я переопределил метод OnError DomainService и выполнил обработку исключений в этом методе. Я пытаюсь бросить исключение бизнес-правил или исключение базы данных для клиента в той или иной форме, чтобы клиент узнавал их и обрабатывал их по-разному. Проблема заключается в том, что клиент всегда получает DomainServiceException и исходное сообщение об ошибке с первой строкой, в результате которой имя операции не сработало. Таким образом, я не могу определить тип исключения на стороне клиента. Я попытался добавить специальную строку определенного вида исключений в OnError нижеWCF RIA Services Бизнес-правило/Обработка исключений баз данных

/// <summary> 
    /// Exception handling and logging on error 
    /// </summary> 
    /// <param name="errorInfo"></param> 
    protected override void OnError(DomainServiceErrorInfo errorInfo) 
    { 
     Exception exceptionToLog = null; 
     //if exception is business rule exception then log only if there's an inner exception 
     if (errorInfo.Error.GetType() == typeof(BusinessRuleException)) 
     { 
      if (errorInfo.Error.InnerException != null) 
      { 
       exceptionToLog = errorInfo.Error; 
      } 
      //send the business rule exception to client 
      base.OnError(new DomainServiceErrorInfo(new DomainException("BRE:" + errorInfo.Error.Message))); 
     } 
     else 
     { 
      exceptionToLog = errorInfo.Error; 
      //if its some other server error then send only generic message. 
      base.OnError(new DomainServiceErrorInfo(new DomainException(ValidationErrorResources.MSG_GenericServerError))); 
     } 

     if (exceptionToLog != null) 
     { 
      //log exception 
      EntLibHelper.LogError(exceptionToLog); 
     } 
    } 

Но, кажется, не будет работать этот трюк. Есть ли способ добавить некоторую дополнительную информацию, к исключению, которое я бросаю с сервера клиенту. Пожалуйста, предложите.

ответ

0

В обновлении RTM вы сможете установить свойство Error на DomainServiceErrorInfo, которое хотите отправить обратно клиенту. В этот момент вы можете установить его в экземпляр исключения домена.

Возможно, вам удастся получить подобное поведение, выбросив новое исключение домена из вашего OnError, хотя это будет хакерское обходное решение (при условии, что оно работает).

+0

Это разочарование для пользователей, которые не могут перейти на .Net 4.0 в ближайшем будущем. –