Problema para persistir uma variável de Sessão criada num WebService

Pergunta Problema para persistir uma variável de Sessão criada num WebService

  • quarta-feira, 9 de maio de 2012 21:39
     
      Contém Código

    Boa noite, pessoal!

    Estou tendo a seguinte dificuldade: Em uma página .asp (asp clássico), consumo um WebService como mostro abaixo:

    Dim dataToSend
    dataToSend = "uname=" & replace(request("login"),"'","") & "&upass=" & replace(request("senha"),"'","")
    
    Dim oXmlDoc, oXmlNode, xmlResponse
    Set oReq = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
    	
    With oReq
         .Open "POST", "http://localhost:4247/Account/ServiceAuth.asmx/AuthenticationUser", false
          .SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
          .SetRequestHeader "charset", "utf-16"
          .Send dataToSend
    End With



    O WebMethod AuthenticationUser, tem que autenticar as credenciais do usuário, popular um objeto com os dados retornados do banco e armazenar este objeto na Sessão! Abaixo o código do Webmethod:

    [WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Xml)]
    public string AuthenticationUser(string uname, string upass)
    {
         ProcessResult result = new ProcessResult();
         result.Status = EStatusType.Error;
         result.Description = "Without Executing";
                
         RBAC oRBAC = new RBAC();
         ProcessResult<CustomUsers> response = oRBAC.AuthenticationUser(uname, upass, sysid);
         if (response.Status == EStatusType.Success)
         {
              HttpContext.Current.Session["ConstUserData"] = response.ResponseData;
                    
             result.Status = EStatusType.Success;
             result.Description = String.Empty;
         }
         else
         {
               result.Status = EStatusType.Error;
               result.Description = response.Description;
         }
    
         using (StringWriter sWriter = new StringWriter(Thread.CurrentThread.CurrentCulture))
         {
              XmlSerializer xml = new XmlSerializer(typeof(String));
              xml.Serialize(sWriter, result.Status.ToString());
              return sWriter.ToString();
         }
    }


    Depois da autenticação, preciso conseguir acessar o objeto salvo na Session numa página .aspx:

    CustomUser usuario = (CustomUser)Session["ConstUserData"];

    O problema é que o objeto Session está sendo recriado a cada chamada de página, ou seja, eu armazeno o objeto na Session no Webservice, e depois quando chamo a pág. aspx, o asp.net chama o evento Session_Start e recria a Session.

    Alguém sabe me dizer como faço pra persistir a sessão iniciada no Webservice, de maneira que consigo acessar a mesma sessão em toda a aplicação?? Ou vocês acham que devo armazenar os dados de outra maneira usando o objeto Cache ou mesmo um Cookie?

    Agradeço desde já!
    Um abraço a todos!


Todas as Respostas