Я хотел бы применить ограничения вызовов для своих методов обслуживания. Эти ограничения должны возвращать исключение Fault при достижении максимального количества вызовов на клиента.применить пользователя MaxAllowedCall по методу wcf
Первое решение, которое я нашел в том, чтобы кодировать логику в рамках услуги:
public class MyService: IService
{
public IList<Entity> FindAll()
{
if(VerifyQuota(Context, "FindAll", this.GetType().Name))
{
//retrieves entities
return entities;
}
else
{
//throws a FaultException
}
return null;
}
private bool VerifyQuota(ContextEntity context,string Method,String Service)
{
// counts the occurences of calls made by the user
// returns true if user can access method , false otherwise
}
}
Он работает, но:
- Это довольно некрасиво
- Это загрязняет логику моего метода
- код избыточность слишком высока, а ремонтопригодность - очень плохая.
Я ищу более элегантное решение и подумал об использовании IOperationBehavior, но не знаю, где я могу найти идентификатор пользователя.
OperationContext.Current не установлен и не является Thread.CurrentPrincipal.
Итак, вот мои вопросы: - это поведение, лучший способ реализовать такие функции? - Если да, то где я могу найти идентификатор пользователя (или вход в систему) - Если нет, где я могу поместить этот код, чтобы он вписывался в архитектуру WCF?