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();
}
对不起,我对这个问题真的很困惑,希望你能理解我的问题,谢谢你的帮助。
checkPassword(null, null)
执行,因为您在username
上调用Trim
,并在执行序列中更靠后password
。如果两个变量都为 null,则在服务调用之前会收到NullReferenceException
。
我看到的一个危险信号是,在决定进行服务调用时,您正在测试username
和password
的修剪(空格截断)版本,但是在将它们作为参数传递给服务调用时,您继续使用纯版本。可能是因为参数中有空格,服务的行为方式不如您认为的那样?
您真正需要做的是在调用服务之前验证username
和password
的值。问问自己:"我的服务是否使用指定的参数值正确响应?问题可能出在服务上,而不是调用方。您将不得不在这里进行一些老式的调试。这是我们不能为你做的事情,所以脱掉那些袜子和鞋子,弄湿你的脚!
作为旁注,您似乎正在通过网络以纯文本形式传递密码。对于中间人来说,拦截这些信息并不是非常困难(实际上可能很容易)。同样,我可以看到你也对SQL注入攻击持开放态度。知道您使用的是无参数内联 SQL,我可以告诉您我的用户名x' or 'a'='a
,这将导致返回Customer
表中的所有行。我不知道这是否一定会在您的案件中造成安全漏洞,但我希望您至少可以想象这可能造成的破坏。我只提到所有这些,因为您的 WCF 似乎与安全相关。
解决了我的问题。
这是因为我使用输入用户名从sql中选择数据,所以当我输入不存在的用户名时,它会给出错误。
谢谢大家。