2009-11-10 1 views
1

Я использую веб-сервис, который устанавливает объект Thread.CurrentPrincipal при входе в систему и скоро позже, когда другой WebMethod того же веб-службы получает доступ к Thread.CurrentPrincipal, его разные/сбрасываетASP.net веб-службы

Может кто-то

скажите мне, если это, как ожидается, или могут разные вызовы WebMethod от одного клиента могут получить доступ и тот же объект Thread.CurrentPrincipal

Благодаря

ответ

1

Как только вы прекращаете использовать нить она идет обратно в пул потоков.

Следующий вызов займет нить из пула потоков, но вы не можете контролировать, какой из них вы получите.

Вам необходимо отправить информацию о том, какой пользователь совершает звонок, с каждым запросом.

+0

Спасибо за быстрый ответ, у меня была догадка об этом, если его не слишком много, вы могли бы помочь, указав/показывая пример – 2009-11-10 12:01:17

+0

или, если бы я мог использовать переменную сеанса – 2009-11-10 12:10:58

0

Ожидается, что каждый новый веб-запрос будет на самом деле новой нитью. И каждый веб-запрос перезагружает такие вещи, как CurrentThread, CurrentCulture и так далее.

Что вы пытаетесь сделать, это сеанс аутентификации. Существует много возможных решений. Но чтобы предложить что-то, я должен указать технологию, которую вы используете.

Например, службы ASMX ASP.NET могут использовать аутентификацию по формам. Также они знают о сеансе ASP.NET.

С помощью WCF вы можете включить поддержку ASP.NET, поэтому у вас будут такие же вещи, как и для ASP.NET ASMX Services. Но вы также можете использовать на Windows Communication Foundation Authentication Service.

В любом случае вам нужно больше информации от вас.

+0

В настоящее время я использую приложение формы Windows, которое будет потреблять веб-службу (ы) для различных операций. По информации в комментарии Shiraz, я предполагаю, что мне придется реализовать все методы, подобные API, которые будут принимать имя пользователя/пароль с каждым запросом. Или я был бы рад прочесть обходное решение – 2009-11-10 12:32:47

+0

web service = это служба ASP.NET ASMX? Или служба WCF? –

+0

да, я имел в виду asp.net asmx Service – 2009-11-10 12:57:30

0

Если вы используете встроенную аутентификацию ASP.NET для своего веб-сайта, а затем просто вызываете веб-службу с веб-страницы, вы можете включить переменные сеанса и пользовательскую контекстную информацию в методах веб-службы с отделкой. Как это:

[WebMethod(EnableSession=true)] 
public void MyWebMethod() 
{ 
    string mySessionVar = HttpContext.Current.Session["sessionVar"].ToString(); 
    IPrincipal currentUser = HttpContext.Current.User; 
    ... 
} 

Если это не поможет решить проблему, расскажите нам, что вы используете объект Thread.CurrentPrincipal для (то, что вы вытягивать из объекта Thread.CurrentPrincipal). Возможно, есть еще одно решение.