c#WCF服务 - 如何获取文本框输入值

时间:2013-10-22 01:51:39

标签: c# wcf

我创建了一个"登录" Windows窗体应用程序与WCF, 如何将输入用户名和密码发送到WCF并检查SQL中是否有用户名?

private void loginbt_Click(object sender, EventArgs e)
{

    string username = textBox1.Text;
    string password = textBox2.Text;

    //check username and password are not empty
    if (username.Trim().Length != 0 && password.Trim().Length != 0)
    {
        checkPassword.CustomerServiceClient service= new checkPassword.CustomerServiceClient();
        var enterPassword = service.checkPassword(username, password);

        //check input value here with WCF?

    }
}

我添加Index was outside the bounds of the array.时收到string getUsername = enterPassword[0].name;异常。看起来WCF没有从文本框中获取输入值,换句话说就是checkPassword(null,null)。

public Customer[] checkPassword(string name, string password){
        List<Customer> customers = new List<Customer>();
        SqlConnection connection = new SqlConnection(
             "Data Source = 11111; Initial Catalog = 1111;" +
         "User ID = 1111; Password = 11111");
        connection.Open();

        SqlCommand command = new SqlCommand("select customerId, customerName, address, password, phone from Customer where customerName='"+name+"'", connection);
        SqlDataReader reader = command.ExecuteReader();
        if (reader.Read()){
            Customer newCustomer = new Customer(reader.GetString(1), reader.GetString(3));
            string correctPW = reader.GetString(3);
            if (correctPW == password)
            {
                customers.Add(newCustomer);
            }
        }
        reader.Close();
        connection.Close();
        return customers.ToArray();
}
抱歉,我真的对这个问题感到困惑,希望你能理解我的问题,谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

服务调用无法以checkPassword(null, null)执行,因为您在Trim上调用username并在执行序列中进一步调用password。如果两个变量都为空,您将在服务调用之前收到NullReferenceException

我看到的一个红旗是你在决定进行服务调用时测试usernamepassword的修剪(空白截断)版本,但是你继续使用未掺杂的将它们作为参数传递给服务调用时的版本。是不是因为参数中有空格,服务的行为不符合你的想法?

您真正需要做的是在调用服务之前验证usernamepassword的值。问问自己,“我的服务是否使用指定的参数值正确响应?”问题可能在于服务而不是呼叫者。你将不得不在这里做一些老式的调试。这是我们不能为你做的事情,所以脱掉那些袜子和鞋子,让你的脚湿透!

作为旁注,您似乎正在通过网络以纯文本形式传递密码。中间人拦截这些信息并不是非常困难(实际上可能很容易)。同样,我可以看到你也对SQL注入攻击持开放态度。知道您正在使用无参数内联SQL我可以告诉您我的用户名是x' or 'a'='a,这将导致返回Customer表中的所有行。我不知道这是否一定会导致您的案件发生安全漏洞,但我希望您至少可以想象这可能导致的各种破坏。我只提到了所有这些因为你的WCF似乎与安全相关。

答案 1 :(得分:0)

解决了我的问题。

这是因为我使用输入用户名从sql中选择数据,所以当我输入一个不存在的用户名时,会出错。

谢谢大家。