我有一个只有一个按钮的WPF应用程序。单击该按钮时,它所做的就是打开该服务。这是代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
ServiceReference1.TestServiceClient c = new ServiceReference1.TestServiceClient();
XDocument doc = XDocument.Load(@"c:\Test\Test.xml");
c.ClientCredentials.UserName.UserName = doc.Root.Element("Credentials").Attribute("username").Value;
c.ClientCredentials.UserName.Password = doc.Root.Element("Credentials").Attribute("password").Value;
try
{
c.Open();
}
catch (Exception ex)
{
}
}
从上面可以看到,我正在从xml文件中的Credentials节点读取用户名和密码以验证客户端。将它放在这里是否合适,因为最初,我在我的验证方法中定义了它:
public override void Validate(string userName, string password)
{
// XDocument doc = XDocument.Load(@"c:\Test\Test.xml");
// userName = doc.Root.Element("Credentials").Attribute("username").Value;
// password = doc.Root.Element("Credentials").Attribute("password").Value;
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
if (string.IsNullOrEmpty(password))
throw new ArgumentNullException("password");
// check if the user is not test
if (userName != "test" || password != "test")
throw new FaultException("Username and Password Failed");
}
但是上面的问题是,无论我传递到c.ClientCredentials.UserName.UserName和c.ClientCredentials.UserName.Password到达Validate方法时都会被覆盖。例如,在我的按钮单击中,如果我只有:
c.ClientCredentials.UserName.UserName = "test1";
c.ClientCredentials.UserName.Password = "test1";
以上内容应该会失败,但是当它进入Validate方法时,我会读取具有用户名和密码属性作为test和test的xml文件,它将通过。
作为旁注,我注意到我的Validate方法被调用,但我似乎无法介入。调试器符号不会被加载。
答案 0 :(得分:1)
您正在用读取
覆盖参数 public override void Validate(string suppliedUserName, string suppliedPassword){
// ...
string validUserName = doc.Root.Element("Credentials").Attribute("username").Value;
string validPassword = doc.Root.Element("Credentials").Attribute("password").Value;