Получение сведений о вызове службы WCF в пользовательском UserNamePasswordValidator - PullRequest
0 голосов
/ 24 августа 2010

У меня есть настройка службы WCF с моим собственным UserNamePasswordValidator. При сбое аутентификации в методе Validate (string userName, string password) я хочу записать подробности в журнал, а также вызвать FaultException.

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

Как получить доступ к этим деталям из метода Validate?

Пример кода ниже:

public class ColesUserNameValidator : UserNamePasswordValidator
{

    public override void Validate(string userName, string password)
    {
        if (CheckCredentials(userName, password))
        {
            return;
        }
        else
        {             
            // do something here to get details of the call to the service and send them to a log file 
            throw new FaultException("Unknown Username or Incorrect Password");
        }
    }

1 Ответ

4 голосов
/ 24 августа 2010

Это невозможно. Валидация выполняется в другом потоке и не имеет доступа к контекстам WCF. Также ни один контекст WCF не содержит информацию о сервисе метод , который был вызван. Сообщение о поступлении содержит только информацию о запрашиваемом действии SOAP.

Если вы хотите, чтобы некоторые журналы реализовывали IErrorHandler. Выкинь SecurityTokenException из пользовательского валидатора и обработай это исключение в ProvideFault в IErrorHandler - создай FaultException. В HandleFault IErrorHandler вы можете реализовать ведение журнала. Для ведения журнала вы можете проверить, не равен ли OperationContext.Current значение NULL (да, это может быть, если перед обработкой сообщения возникло исключение), и получить доступ к информации о текущем вызове операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...