none
Session + LINQ + Webservice RRS feed

  • Pergunta

  • Bom dia pessoal,

    Tenho um webservice, onde é feito a validação de usuário por login e senha, gostaria de guardar essas informações em uma session, para que a carga inicial de inforamações seja carregada de acordo com o usuário logado, alguem poderia me dá uma mão?

    Esse é meu método de validação do usuário:

    public bool ValidaUsuario(string User, string Pass)
    		{
    			try
    			{
    				var hashedString = Functions.getMd5Hash(Pass);
    
    				//Chama Stored Procedure LinkIT_Login
    				var validation = linkitDataContext.LinkIT_Login(User, hashedString);
    
    				//Verifica se a validação retorna TRUE ou FALSE
    				if (validation.Count() != 0)
    				{
    					return true;
    				}
    				else
    				{
    					return false;
    				}
    
    			}
    			catch
    			{
    				
    				throw;
    			}
    		}

    Esse é meu WebService que carrega meu método acima:

    public bool loginAcesso(string WsUser, string WsPass)
    		{
    			UsuarioController ObjValidacao = new UsuarioController();
    			return ObjValidacao.ValidaUsuario(WsUser, WsPass);
    		}

     

    segunda-feira, 14 de fevereiro de 2011 10:21

Respostas

  • se for na aplicação você terá de alterar seu método para em vez de retornar um boolean ele retornar um dado que seja referente a chave de autetnicação do seu usuário pode ser um inteiro com o ID dele ou coisas assim.
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Heron Dantas segunda-feira, 14 de fevereiro de 2011 17:50
    segunda-feira, 14 de fevereiro de 2011 13:10
    Moderador

Todas as Respostas

  • mas você quer persistir o login do cara na aplicação que consome o webservice ou no webservice propriamente dito ?

    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 14 de fevereiro de 2011 12:41
    Moderador
  • Olá Olavo, seria na aplicação, olha o que já fiz, o WHERE deveria ser uma session do login do usuário(isso na minha mente não sei se faz realmente assim). Então teria que criar uma session no meu método lá em cima. Conseguiu entender? por que atráves da session ele saberia quem está logado e poderia carregar as informações das tabelas que quero para esse usuário .

    var contratos =
    				from c in linkitDataContext.Contratos
    				join u in linkitDataContext.Usuarios on c.IdEmpresa equals u.IdEmpresa
    				where u.IdUsuario = "MINHA SESSION"
    				select u;

    segunda-feira, 14 de fevereiro de 2011 13:04
  • se for na aplicação você terá de alterar seu método para em vez de retornar um boolean ele retornar um dado que seja referente a chave de autetnicação do seu usuário pode ser um inteiro com o ID dele ou coisas assim.
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Heron Dantas segunda-feira, 14 de fevereiro de 2011 17:50
    segunda-feira, 14 de fevereiro de 2011 13:10
    Moderador
  • Seria mais simples se fosse no webservice?
    segunda-feira, 14 de fevereiro de 2011 13:22
  • no webservice nem funcionaria, pois você percisa persistir na sua aplicação mesmo!! mas é simples fazer essa mudança e persistir tambem.
    troca o retorno do seu método para int e muda a consulta pra retornar o id do usuário, este seria o primeiro passo.

    no retorno do webserice você atribui isto apra uma session

    Session["usuarioId"] = webservice.ValidaUsuario("user","password");
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 14 de fevereiro de 2011 14:00
    Moderador
  • ok, mas i na minha query ? o que coloco?

     

    var contratos =
    				from c in linkitDataContext.Contratos
    				join u in linkitDataContext.Usuarios on c.IdEmpresa equals u.IdEmpresa
    				where u.IdUsuario = "MINHA SESSION"
    				select u;
    
    

    segunda-feira, 14 de fevereiro de 2011 15:38
  • 	from c in linkitDataContext.Contratos
    				join u in linkitDataContext.Usuarios on c.IdEmpresa equals u.IdEmpresa
    				where u.IdUsuario = ((int)Session["usuarioId"]) 
    				select u;
    
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 14 de fevereiro de 2011 15:44
    Moderador
  • Acho que estou quase conseguindo, poxa isso está me dando dor de cabeça. Olavo dá uma olhada no que fiz,

    nesse código abaixo retorna o seguinte erro: The name 'Session' does not exist in the current context

    		public List<DataTable> RetornaCargaInicial()
    		{
    		  DataTable dtEmpresa = new DataTable();
    
    		  dtEmpresa.Columns.Add("IdEmpresa", typeof(int));
    		  dtEmpresa.Columns.Add("CNPJ", typeof(string));
    		  dtEmpresa.Columns.Add("InscricaoEstadual", typeof(string));
    		  dtEmpresa.Columns.Add("NomeFantasia", typeof(string));
    		  dtEmpresa.Columns.Add("RazaoSocial", typeof(string));
    		  dtEmpresa.Columns.Add("Logradouro", typeof(string));
    		  dtEmpresa.Columns.Add("LogradouroNumero", typeof(string));
    		  dtEmpresa.Columns.Add("LogradouroComplemento", typeof(string));
    		  dtEmpresa.Columns.Add("Bairro", typeof(string));
    		  dtEmpresa.Columns.Add("IdMunicipio", typeof(int));
    		  dtEmpresa.Columns.Add("CEP", typeof(string));
    		  dtEmpresa.Columns.Add("Telefone", typeof(string));
    		  dtEmpresa.Columns.Add("Fax", typeof(string));
    		  dtEmpresa.Columns.Add("Site", typeof(string));
    		  dtEmpresa.Columns.Add("Contato", typeof(string));
    		  dtEmpresa.Columns.Add("Observacao", typeof(string));
    		  dtEmpresa.Columns.Add("Ativo", typeof(Boolean));
    
    			var QueryEmpresa =
    				 from a in linkitDataContext.Empresas
    				 join b in linkitDataContext.Usuarios on a.IdEmpresa equals b.IdEmpresa
    				 where b.IdUsuario == ((int)Session["usuarioId"]) 
    				 select b; 
    
    			var x = QueryEmpresa.ToArray();
    			
    			foreach (var intemEmpresa in x)
    			{
    				dtEmpresa.Rows.Add(
    					intemEmpresa.IdEmpresa.ToString(),
    					.
    					.
    					.
    
    			}
    		}
    

    Esse Método abaixo é o método de validação do usuário, onde fiz as mudanças que pediu

    <strong>public string ValidaUsuario(string User, string Pass)
    		{
    			try
    			{
    				var hashedString = Functions.getMd5Hash(Pass);
    
    				//Chama Stored Procedure LinkIT_Login
    				var validation = linkitDataContext.LinkIT_Login(User, hashedString);	
    
    				//Verifica se a validação retorna TRUE ou FALSE
    				if (validation.Count() != 0)
    				{
    					return hashedString;
    				}
    				else
    				{
    					return "";
    				}
    
    			}
    			catch
    			{
    				
    				throw;
    			}
    		}</strong>
    
    

    Esse é o meu web service:

    		[WebMethod(Description = "Serviço de Carga Inicial do Técnico")]
    		public DataTable CargaInicial()
    		{
    			if (Session["UsuarioId"] != null)
    			{
    
    				UsuarioController ObjRetornaCargaInicial = new UsuarioController();
    				ObjRetornaCargaInicial.RetornaCargaInicial();
    			}
    
    		}
    

     

    segunda-feira, 14 de fevereiro de 2011 16:33
  • o session existe nas camadas de apresentação por default e nas paginas que tiverem referenciando o namespace:

    System.Web


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 14 de fevereiro de 2011 16:47
    Moderador
  • Não deu certo não, mas muito obrigado Olavo, vou ver o que faço depois.

    vlw

    segunda-feira, 14 de fevereiro de 2011 17:51
  • a sua aplicação é web ou windows forms ?

    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 14 de fevereiro de 2011 17:55
    Moderador
  • É Web, mas no meu caso só tenho uma classe com os métodos que vou usar no webservice.
    segunda-feira, 14 de fevereiro de 2011 17:56