Внедрить поведение в WCF после или во время идентификации вызываемого метода WebGet - PullRequest
0 голосов
/ 05 октября 2010

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

Однако я пришелс проблемой на уровне авторизации, как я хотел бы сделать авторизацию на уровне вызываемого метода.Например,

        [OperationContract]
        [WebGet(UriTemplate = "/{ConstituentNumber}/")]
        public Constituent GetConstituent(string ConstituentNumber)
        {
            Authorisation.Factory.Instance.IsAuthorised(MethodBase.GetCurrentMethod().Name,  WebOperationContext.Current.IncomingRequest.Headers["Authorization"]);
            return constituentSoapService.GetConstituentDetails(ConstituentNumber);
        }

По сути, теперь мне нужно скопировать вызов в IsAuthorised для каждого имеющегося у меня веб-метода.Это имеет две проблемы.

  1. Это не очень проверяемое.Я извлек зависимости как можно лучше.Но эта настройка означает, что мне нужно смоделировать вызовы к базе данных и вызовы WebOperationContext.
  2. Мне нужно копировать этот метод снова и снова.

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

Еще лучше, если я смогу создать атрибут, который скажет, как оценивать метод.

1 Ответ

1 голос
/ 05 октября 2010

Одним из возможных способов сделать то, что вы хотите, может быть перехват запросов с пользовательским IDispatchMessageInspector (или аналогичной точкой расширения WCF).

Однако хитрость в том, что вы получаете только необработанное сообщение, а не то, где оно будет обработано (то есть имя метода). Однако, немного поработав, можно создать карту URI / действий и соответствующих им имен методов (, как вы бы сделали это для SOAP, хотя еще не пробовали это для WebGet / WebInvoke еще).

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