2013-05-09 16 views
0

我在我的WCF服务中覆盖UserNamePasswordValidator,我想验证用户名和密码对SQL数据库。无论如何要将连接字符串传递到PasswordValidator类中吗?我还应该提到我的课程与主要的WCF服务是分开的。如何在重写时传递连接字符串UserNamePasswordValidator

public class MyCustomUserNameValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     //TODO: how to pass in connection string?? 
     connectionString = "Data Source=MyDataSource;Initial Catalog=MyCatalog;User ID=MyUserName;Password=MyPassword"; 

     // connect to database and validate crendentials... 

     if (!valid) 
     { 
      throw new SecurityTokenException("Access Denied."); 
     } 
    } 
} 

配置部分:

<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyCompany.Services.Validation.MyCustomUserNameValidator, MyCompany.Services.Validation"/> 

感谢。

回答

1

您可以在配置文件中的connectionString存储<appsettings>

<addkey="DbConnection" value ="Your Connection String"/> 

,并在MyCustomUserNameValidator 类使用尽可能

ConnectionString = ConfigurationSettings.WebConfig["DbConnection"].ToString(); 

*编辑:ConfigurationManager does actually read from the web.config. the exact solution was: ConfigurationManager.AppSettings["ConnectionString"]他回答

+0

我应该提到MyCustomUserNameValidator是在一个单独的dll中o主要的WCF服务。如果有一种方法可以调用主web.config,我会很满意,但如果设置与主Web配置不匹配,则有第二个配置文件会导致其他开发人员感到困惑和沮丧。 – user1662409 2013-05-09 10:57:21

+0

你可以使用配置为'var config = ConfigurationManager.OpenExeConfiguration(“MyDll.dll.config”);' – Veer 2013-05-09 11:03:18

+0

或 只需将一个app.config文件添加到DLL项目中,并确保从配置设置中读取配置在DLL里面。部署时,您的配置文件需要具有名称“MyDLL.dll.config”(假设您的DLL被命名为“MyDLL.dll”)并且与DLL位于同一文件夹中。 以下代码应该从我的dll返回我的connectionstring: 'return ConfigurationManager.AppSettings [“DbConnection”];' – Veer 2013-05-09 11:05:46