Я использую WCF custom Validator с HTTPS (.NET 4.5). Validate on success возвращает объект Customer, который я хотел бы использовать позже. В настоящее время я могу сделать это со статическими переменными, которые мне нравится избегать, если это возможно. Я попытался использовать HttpContext, который становится нулевым в основном потоке. Я понимаю Подтвердить Оценка: бежит под другой нитью. Есть ли способ поделиться информацией о сеансе без участия совместного использования базы данных или файла. См. Связанные темы here и here.UserNamePasswordValidator и управление сеансом
В Authentication.cs
public class CustomValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
//If User Valid then set Customer object
}
}
В Service.cs
public class Service
{
public string SaveData(string XML)
{
//Need Customer object here. Without it cannot save XML.
//HttpContext null here.
}
}
Благодарим за ответ. Я уже пробовал это решение. HttpContext выходит из области действия, когда вы переходите от метода Validate to SaveData. FYI, также OperationContext null в Validate. –
Итак, вместо HttpContext используйте OperationContext. Вы можете получить имя пользователя из OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name. Вы не добавляете клиента в сеанс во время Authenitcate. Вы добавляете его в сеанс, когда запрашиваются данные о клиенте. К этому времени пользователь аутентифицируется, а сеанс доступен для вашей службы. – Chandermani
OperationContext имеет значение null в Validate. UserNamePasswordValidator работает в другом контексте/потоке. –