Веб-сервисы ASP.net
Я использую веб-сервис, который устанавливает объект Thread.CurrentPrincipal при входе в систему и вскоре позже, когда другой веб-метод того же веб-сервиса обращается к Thread.CurrentPrincipal, его другой / сбрасывает
Может кто-нибудь сказать мне, если это ожидается, или различные вызовы веб-метода из одного и того же клиента могут получить доступ к одному и тому же объекту Thread.CurrentPrincipal
Спасибо
3 ответа
Как только вы перестаете использовать поток, он возвращается в пул потоков.
Следующий вызов возьмет поток из пула потоков, но вы не можете контролировать, какой из них вы получите.
Вам необходимо отправить информацию о том, какой пользователь совершает звонок, с каждым запросом.
Если вы используете встроенную проверку подлинности ASP .NET для своего веб-сайта, а затем просто вызываете веб-службу с веб-страницы, вы можете включить переменные сеанса и информацию о контексте пользователя в методах веб-службы с помощью украшения. Как это:
[WebMethod(EnableSession=true)]
public void MyWebMethod()
{
string mySessionVar = HttpContext.Current.Session["sessionVar"].ToString();
IPrincipal currentUser = HttpContext.Current.User;
...
}
Если это не решит вашу проблему, сообщите нам, для чего вы используете объект Thread.CurrentPrincipal (что вы извлекаете из объекта Thread.CurrentPrincipal). Возможно, есть другое решение.
Ожидается, что каждый новый веб-запрос на самом деле новый поток. И каждый веб-запрос сбрасывает такие вещи, как CurrentThread, CurrentCulture и так далее.
Что вы пытаетесь сделать, это сеанс аутентификации. Есть много возможных решений. Но чтобы предложить что-то, я должен указать технологию, которую вы используете.
Например, службы ASP.NET ASMX могут использовать проверку подлинности с помощью форм. Также они знают о ASP.NET Session.
С WCF вы можете включить поддержку ASP.NET, так что у вас будет то же самое, что и для ASP.NET ASMX Services. Но вы также можете использовать службу аутентификации Windows Communication Foundation.
В любом случае нужно больше информации от вас.