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

本文关键字:取文本 输入 何获 WCF 服务 | 更新日期: 2023-09-27 18:36:23

我用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();
}

对不起,我对这个问题真的很困惑,希望你能理解我的问题,谢谢你的帮助。

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

服务调用不可能按

checkPassword(null, null)执行,因为您在username上调用Trim,并在执行序列中更靠后password。如果两个变量都为 null,则在服务调用之前会收到NullReferenceException

我看到的一个危险信号是,在决定进行服务调用时,您正在测试usernamepassword的修剪(空格截断)版本,但是在将它们作为参数传递给服务调用时,您继续使用纯版本。可能是因为参数中有空格,服务的行为方式不如您认为的那样?

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

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

解决了我的问题。

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

谢谢大家。