2015-09-07 2 views
0

Как я могу сформировавшиеся после модели в resfull службы ФОСсоздания WCF операции Invoker

Операция Поведение вызывает пользовательскую операцию Invoker, который выполняет проверку на корректность на основе входов/значений, передаваемых в заголовке запроса HTTP. При успешной проверке пользователи будут перенаправлены на фактическую операцию. В противном случае будет выбрано настраиваемое исключение, и пользователи будут перенаправлены на страницу «Отказано в доступе».

+0

Вам нужно сделать это так? (то есть посредством поведения операции)? Вы не можете использовать декоратор? Или, может быть, AOP-аспект? –

+0

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

ответ

0

Один из способов достижения таможенной проверки - это услуга decorator. Рассмотрим следующий код:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    string GetData(int value); 
} 

public class Service : IService 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 
} 

public class ServiceValidationDecorator : IService 
{ 
    private readonly IService m_DecoreatedService; 

    public ServiceValidationDecorator(IService decoreated_service) 
    { 
     m_DecoreatedService = decoreated_service; 
    } 

    public string GetData(int value) 
    { 

     IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest; 

     WebHeaderCollection headers = request.Headers; 

     //Here use the headers to do you custom validation 
     bool valid = ... 

     if(!valid) 
      throw new SecurityException("Access Denied"); 

     return m_DecoreatedService.GetData(value); 
    } 
} 

Здесь контракт WCF является IService, и оригинальное выполнение сервис класса Service.

Класс ServiceValidationDecorator - это декоратор, который выполняет выборочную проверку, а затем передает запрос другой службе.

Теперь вместо размещения класса Service необходимо разместить класс ServiceValidationDecorator.

WCF собирается пожаловаться на то, что ServiceValidationDecorator не имеет конструктора без параметров. Правильный способ исправить это, чтобы создать пользовательский экземпляр поставщика (взглянуть на this), а затем построить объект ServiceValidationDecorator (в пределах провайдера экземпляра), как это:

new ServiceValidationDecorator(new Service()) 

Если вы хотите быстро обходной путь только чтобы быстро протестировать это, просто создайте класс Service в конструкторе ServiceValidationDecorator (это на самом деле плохой дизайн).

Если у вас есть много услуг, и вы не хотите создавать декоратор для каждой службы, посмотрите на Aspect Oriented Programming (AOP). Найдите PostSharp или DynamicProxy.

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