2013-01-11 38 views
2

我目前正在为一个学校项目开发一个交友网站,而且我目前正在尝试为其创建登录功能。我们不应该使用自动注册和登录功能。在asp.net web应用程序上使用WCF服务应用程序登录

我们与数据库的任何联系都应该通过WCF服务应用程序。我知道如何在不使用WCF的情况下实现它,但我现在需要使用它,搜索后我无法在Google上找到它。

public bool login(string UserName, string PassWord, bool isActive = true) { 
     try { 
      DALDataContext db = new DALDataContext(); 
      var qry = from m in db.tblUsers 
         where m.userName == UserName && m.password == PassWord && m.isActive == isActive 
         select m; 
      if (qry.Count() > 0) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
     catch (Exception) { 
      return false; 
     } 
    } 

这就是我成功了,所以如果我在我的web应用程序 实现像这样这应该工作:

ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client(); 
protected void btnLoginUser_Click1(object sender, EventArgs e) { 
    try { 
      string UserName = txtUserName.Text; 
      string PassWord = txtPassWord.Text; 
      obj.login(UserName, PassWord); 

      if (true) { 
       Session["me"] = UserName; 
       Response.Redirect("~/MyProfile.aspx"); 
       } 
     } 
     catch (Exception){ 

     } 
    } 

我一直与这个几个小时,登记簿一部分这有效...所以我做了一些非常错误的事情。我正在使用Visual Studio 2010和SQL Server 2008 R2。

[解决]

这是我如何解决它

protected void btnLoginUser_Click1(object sender, EventArgs e) 
    { 
     try 
     { 
      string UserName = txtUserName.Text; 
      string PassWord = txtPassWord.Text; 
      bool isActive = true; 


      if (obj.login(UserName, PassWord, isActive)) 
      { 
       Session["me"] = UserName; 
       Response.Redirect("~/MyProfile.aspx"); 
      } 
      else 
      { 
       lblErr.Text = "fail"; 
      } 
      } 

     catch (Exception) 
     { 

     } 

    } 
} 

}

回答

5

你忽略你的登录方法的返回值:

obj.login(UserName, PassWord); // <-- returns true/false. 

if (true) // <-- Why? 
{ 
    ... 

你的意思要做

if (obj.login(UserName, PassWord)) 
{ 
    Session["me"] = UserName; 
    Response.Redirect("~/MyProfile.aspx"); 
} ... 
+0

我只是用一些代码在VS中打转转,一直在如果几个小时,它始终登录 – Ra91

+0

仍然需要检查它是否真实,我现在这样做'if(obj.login(UserName,PassWord)) { Session [“me”] =用户名; Response.Redirect(“〜/ MyProfile.aspx”); } else { lblErr.Text =“fail”; } }' – Ra91

+1

这就是'if(表达式)'所做的。 “表达式”必须评估为真才能进入该块。 'obj.login(UserName,Password)'将是true或false,所以当'obj.login'返回true时,你只能输入'if'块。就像你现在所做的那样,'if(true)'将永远进入if块。 – Bort

-2

建议通过名称从WCF服务回报用户,如:

public tblUser login(string UserName); 

在客户端,你可以通过名字用户:

var user = obj.login(UserName); 
if (user != null && user.password == txtPassWord.Text) 
    DoLogin(); 
else 
    ShowError(); 
+0

请注意,任何检查WCF响应的人都可以看到用户密码。可能不是你想要的东西。 – Bort

+0

密码可以在数据库中加密。在这种情况下,它应该在比较之前解密。 – Mardok

+0

不可以。您只检查服务器上的密码*。切勿在客户端上做。 –

相关问题