我应该在哪里读取我的 WCF 服务的用户名和密码

本文关键字:用户 密码 服务 在哪里 读取 我的 WCF 我应该 | 更新日期: 2023-09-27 17:56:29

我有一个只有一个按钮的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 文件中的"凭据"节点读取用户名和密码以验证客户端。 将其定位在此处是否合适,因为最初,我在我的 Validate 方法中定义了它:

 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,当它到达Validify方法时都会被覆盖。 例如,在我的按钮单击中,如果我只有:


c.ClientCredentials.UserName.UserName = "test1"; c.ClientCredentials.UserName.Password = "test1";

上述操作应该会失败,但是当它进入 Validate 方法时,我在其中读取了用户名和密码属性作为测试和测试的 xml 文件,它将通过。

作为旁注,我注意到我的 Validate 方法被调用,但我似乎无法介入。 调试器符号不会加载。

我应该在哪里读取我的 WCF 服务的用户名和密码

您正在用读取覆盖参数

 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;