У меня есть код, подобный приведенному ниже фрагменте кода (из http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/)Windows Identity Foundation (WIF) - ClaimsAuthenticationManager
public class Transformer : ClaimsAuthenticationManager
{
public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal)
{
var claimName = "customClaimType";
// expensive operation
var claimValue = [from expensive operation];
incomingPrincipal.Identities[0].Claims.Add(new
Claim(claimName, claimValue));
return incomingPrincipal;
}
}
И в статье (http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/), Доминик указывает на то, что если мы не хотим извлекать эти (дорогие) заявки из хранилища данных по каждому запросу, тогда мы можем использовать SAM (SessionAuthenticationModule). Однако не удалось ли нам просто проверить, существует ли эта претензия для идентификации, а затем вывести заявку только в том случае, если она не существует? Разве это не решило бы проблему производительности?
public class Transformer : ClaimsAuthenticationManager
{
public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal)
{
var claimName = "customClaimType";
if(incomingPrincipal.Identities[0].Claims.Where(x => x.ClaimType == claimName).Count() <= 0)
{
// expensive operation
var claimValue = [from expensive operation];
incomingPrincipal.Identities[0].Claims.Add(new
Claim(claimName, claimValue));
}
return incomingPrincipal;
}
}
Я не понимаю, почему мы должны прибегать к SessionAuthenticationModule. Поэтому я попробовал вышеуказанный код на своей локальной машине, и я прошел через него, чтобы проверить, что для последующих запросов (после первоначального) дорогостоящая операция не вызывается. Теперь я не уверен, будет ли это иметь место в среде с балансировкой нагрузки (веб-ферма) или в действительно объединенной группе, в которой задействованы несколько полагающихся сторон, разделяющих структуру единого входа.
Я очень благодарен за объяснение, которое поможет мне лучше понять это.
Спасибо! -Karthi.