2013-10-03 4 views
0

Я настраиваю службу REST WCF через код, и что-то не так. Я создаю обработчик ошибок с кодом, как показано ниже.WCF 3.5 добавление IErrorHandler не вызвано

Когда я запускаю наш сервис (самообслуживаемый), код ProvideFault попадает, когда я бросаю исключение WebFaultException с неавторизованным кодом состояния. Проблема в том, что клиент (browswer) получает «Сервер обнаружил ошибку при обработке запроса. Подробнее см. В журналах сервера». Любая идея, что мне не хватает? Кроме того, поскольку я сам занимаюсь хостингом, нет «журналов сервера», поэтому в основном я полностью в темноте. Нужно ли вообще записывать «серверные журналы» в самообслуживаемую службу?

ПРИМЕЧАНИЕ. Исключение WebFaultException - это тот, который мы написали с тех пор, как мы используем 3.5.

public class WebErrorHandler : IErrorHandler 
{ 
    private IErrorHandler m_chainedHandler; 

    public WebErrorHandler(IErrorHandler chainedHandler) 
    { 
     m_chainedHandler = chainedHandler; 
    } 

    #region IErrorHandler Members 

    public bool HandleError(Exception error) 
    { 
     return m_chainedHandler.HandleError(error); 
    } 

    public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault) 
    { 
     WebFaultException ex = error as WebFaultException; 
     if (ex != null) 
     { 
      fault = Message.CreateMessage(version, ""); 
      HttpResponseMessageProperty p = new HttpResponseMessageProperty(); 
      p.StatusCode = ex.Status; 
      p.StatusDescription = "Another test"; 

      fault.Properties.Add(HttpResponseMessageProperty.Name, p); 
     } 
     else 
     { 
      m_chainedHandler.ProvideFault(error, version, ref fault); 
     } 
    } 

    #endregion 
} 

ответ

0

Если вы действительно обращаетесь с ошибкой, вы должны вернуть true из ошибки обработки. Вызов вложенных обработчиков может вызвать ошибку. (И если связанный обработчик равен null, прикованный вызов вызовет исключение NullReferenceException).

+0

Я изменил код в HandleError, чтобы вернуть true без каких-либо изменений в результате. Я думал, что HandleError будет вызван впоследствии в любом случае. В любом случае, похоже, что служба игнорирует ошибку, которую я создаю в обработчике. – bpeikes

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