我正在使用一个web服务,它在登录时设置Thread.CurrentPrincipal对象,不久之后,当相同web服务的另一个web方法访问Thread.CurrentPrincipal时,它的不同/重置
有人能告诉我这是预期的吗?或者来自同一客户端的不同the方法调用是否可以访问相同的Thread.CurrentPrincipal对象
谢谢
发布于 2009-11-10 11:55:39
一旦你停止使用一个线程,它就会回到线程池中。
下一次调用将从线程池中获取一个线程,但您无法控制获取哪个线程。
您需要在每次请求时发送有关哪个用户正在进行呼叫的信息。
发布于 2009-11-10 12:24:11
这是意料之中的,每一个新的web请求实际上都是新的线程。而每个web请求都会重置CurrentThread、CurrentCulture等内容。
您尝试做的是身份验证会话。有许多可能的解决方案。但是为了提出一些建议,我必须具体说明你使用的技术。
例如,ASP.NET ASMX服务可以使用窗体身份验证。此外,他们还了解ASP.NET会话。
使用WCF,您可以启用ASP.NET支持,因此您将拥有与ASP.NET ASMX服务相同的功能。但您也可以利用Windows Communication Foundation Authentication Service。
无论如何,我需要你提供更多的信息。
发布于 2009-11-11 23:37:18
如果您对网站使用内置的ASP身份验证,然后仅从网页调用.NET服务,则可以通过修饰在web服务的方法中启用会话变量和用户上下文信息。如下所示:
[WebMethod(EnableSession=true)]
public void MyWebMethod()
{
string mySessionVar = HttpContext.Current.Session["sessionVar"].ToString();
IPrincipal currentUser = HttpContext.Current.User;
...
}
如果这还不能解决您的问题,请告诉我们您使用Thread.CurrentPrincipal对象做什么(从Thread.CurrentPrincipal对象中提取什么)。也许还有另一种解决方案。
https://stackoverflow.com/questions/1707421
复制