2009-08-20 2 views
0

Я разработал небольшую службу WCF, которая обрабатывает HTTP-запрос.Вставьте все ошибки внутреннего сервера в журнал событий Windows

Я хочу, чтобы быть в курсе каждой ошибки, что происходит:

  • все, что приводит к 500 Внутренняя ошибка сервера из контрактов просмотра
  • все, что вызывает CommunicationException от привязок просмотра (я написал обычным, но я использую также стандартные)

Ошибки должны быть помещены в журнал событий Windows.

Мой вопрос:

  • Есть ли возможность добавить центральный обработчик событий для всего стека WCF, которая захватывает все исключения и печатает их в журнале событий?

Поздравления.

ответ

1

На стороне сервера - да, как уже указывал Джон, вы можете в принципе реализовать интерфейс IErrorHandler в своем классе обслуживания и зафиксировать все ошибки с этой стороны.

Однако на стороне клиента, вы просто должны использовать старый добрый .NET try {...} catch {...}, чтобы обеспечить все обслуживание вызовов - в конце концов, вы могли бы потенциально

  • вызова сервер, который не существует все
  • вызова сервер, который временно недоступен
  • свободных сети connectitivity (парень с большим бульдозером сократить сетевой провод :-))
  • больше из такого рода вещей

Это будут CommunicationExceptions (или их потомки) и должны обрабатываться на стороне клиента по мере их возникновения.

Таким образом, вы можете обрабатывать серверную часть объектов централизованно (по крайней мере, до тех пор, пока сообщение дошло до вашего класса обслуживания и обрабатывается) - все остальное должно обрабатываться отдельно.

Марк

+0

Я вставил «проливает новый CommunicationException (» ошибка произошла «)» в метод ПолучитьЗапроса канала пользовательских привязок. Пользовательский обработчик ошибок был вставлен через «foreach» (ChannelDispatcher cd в h.ChannelDispatchers) {cd.ErrorHandlers.Add (новый MyErrorHandler());} Однако мой пользовательский обработчик ошибок не вызван в любое время. – Etan

+0

Я думаю, вы слишком рано !:-) Если я правильно помню, интерфейс IErrorHandler запускается только после того, как диспетчер на стороне сервера отправил сообщение методу объекта службы. Все, что до этого будет отправлено прямо клиенту –

+0

, «throw new CommunicationException (« error »)» в реализацию контракта также не будет работать. Какие исключения обрабатываются обработчиком ошибок, если не те, которые были перед отправкой, а не после отправки? – Etan

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