Web服务调用中的“模拟”会话

时间:2011-07-21 20:52:01

标签: c# asp.net session session-cookies

我正在尝试编写一个返回会话变量的Web服务。调用此Web服务的应用程序可以访问当前会话的会话ID。

我尝试通过创建“ASPNet_SessionID”cookie然后将其设置为代理类的cookie容器并将其设置为Web服务,但这不起作用。我是这样做的,

 protected void CallService(string sessionID)
    {
        localhost.AuthService auths = new localhost.AuthService(); //Service Proxy class
        System.Net.CookieContainer cookieJar = new System.Net.CookieContainer();


        System.Net.Cookie newCookie = new System.Net.Cookie("ASPNet_SessionID", sessionID);
        newCookie.Domain = "http://localhost";
        cookieJar.Add(newCookie);
        auths.CookieContainer = cookieJar;


        string SessionData = auths.GetSessionData();

GetSessionData Web方法只返回Session数据,如下所示:

[WebMethod(EnableSession=true)]
public string GetSessionData(string sessionID) {return ((string)Session["user"]);}

这种做法是否有效,或者我做错了什么?

UPD:此链接实际上解决了我的问题 - 我能够访问所有会话InProc并能够通过ID选择正确的会话:

http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx

3 个答案:

答案 0 :(得分:1)

“我正在尝试启用第三方应用程序,以查看哪些用户登录到我的网站。”

要实现这一目标,您最好使用ASP.NET Membership而不是会话来跟踪用户。

然后,要查看登录状态,您只需执行以下操作:

bool isLoggedIn = Membership.GetUser("Joe.User").IsOnline;

答案 1 :(得分:0)

将AspCompatibilityMode切换为true

答案 2 :(得分:0)

您的系统是否设计为单用户?

您建议'哪个用户当前已登录'但如果是这种情况则不需要在会话中存储任何内容,您可以将用户ID /名称/详细信息粘贴到数据库中的表中,或者可能使用.NET配置文件更新应用程序级变量 - http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx