Вход исключений в WCF с IErrorHandler в HandleError или ProvideFault?

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

Единственный путь I видит для получения пользователя, который вызвал исключение:

OperationContext. Текущий. IncomingMessageProperties. Безопасность. ServiceSecurityContext. PrimaryIdentity

... Но это только, кажется, работает в ProvideFault, и не в HandleError. Существует ли способ получить пользователя в HandleError? Я хотел бы использовать HandleError вместо ProvideFault, поскольку это обратилось к фоновому потоку и означало для регистрации ошибок, правильно?

6
задан Dannerbo 19 May 2010 в 21:19
поделиться

1 ответ

Два метода IErrorHandler имеют довольно четко определенные обязанности:

  • HandleError здесь, чтобы обрабатывать все неперехваченные исключения - вот почему это лучшее место для ведения журнала - это действительно его причина быть

  • ProvideFault должен превратить ваше исключение .NET в совместимую ошибку SOAP - или полностью проигнорировать исключение

Конечно, технически ничто не мешает вам выполнить запись в методе ProvideFault - это просто не то место, куда я бы пошел искать эту функциональность, если бы мне когда-нибудь пришлось ее искать. Я предпочитаю следовать принципу наименьшего удивления - если метод называется ProvideFault , я ожидаю, что он предоставит только FaultException , а не многое другое. , тоже.

Чтобы получить доступ к контексту безопасности вашей службы, используйте этот фрагмент кода:

ServiceSecurityContext secCtx = ServiceSecurityContext.Current;

if(secCtx.PrimaryIdentity != null)
{
   // do something with primary identity
}
3
ответ дан 17 December 2019 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: