[英]ASP.net web services
我正在使用一个Web服务,该服务在登录时设置Thread.CurrentPrincipal对象,稍后不久,当同一Web服务的另一个Web方法访问Thread.CurrentPrincipal时,其不同/重置
有人可以告诉我这是否是预期的,还是可以从同一客户端进行的不同web方法调用可以访问同一Thread.CurrentPrincipal对象
谢谢
一旦停止使用线程,线程就会回到线程池。
下一个调用将从线程池中获取一个线程,但是您无法控制获得哪个线程。
您需要随每个请求发送有关哪个用户正在进行呼叫的信息。
可以预期,每个新的Web请求实际上都是新线程。 并且每个Web请求都会重置诸如CurrentThread,CurrentCulture之类的东西。
您要执行的是身份验证会话。 有许多可能的解决方案。 但是要提出一些建议,我必须指定您使用的技术。
例如,ASP.NET ASMX服务可以使用表单身份验证。 他们也知道ASP.NET会话。
使用WCF,您可以启用ASP.NET支持,因此您将拥有与ASP.NET ASMX服务相同的东西。 但是您也可以利用Windows Communication Foundation身份验证服务 。
无论如何都需要您提供更多信息。
如果您对网站使用内置的ASP .NET身份验证,然后仅从网页调用Web服务,则可以通过修饰在Web服务的方法中启用会话变量和用户上下文信息。 像这样:
[WebMethod(EnableSession=true)]
public void MyWebMethod()
{
string mySessionVar = HttpContext.Current.Session["sessionVar"].ToString();
IPrincipal currentUser = HttpContext.Current.User;
...
}
如果那不能解决您的问题,请告诉我们您将Thread.CurrentPrincipal对象用于什么(要从Thread.CurrentPrincipal对象中提取什么)。 也许还有另一种解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.