在dll中使用asp.net成员资格提供程序

时间:2010-12-29 18:07:58

标签: dll asp.net-membership

过去几年我在网络应用中使用了会员提供商。我现在对工作中的内部项目有一个新的“请求”。他们希望服务(不是Web服务)快速进行身份验证。基本上,公开 ValidateUser(用户名,密码)方法......

我在一个DLL中构建它,它将与我们的内部网站一起使用。使这项工作的最佳方法是什么? DLL将引用Web应用程序,Web应用程序引用DLL。如何让DLL了解成员资格提供程序?

TIA

PS:如果在其他地方已经回答了这个问题,请指导我......

编辑:我发现了一篇关于在WinForms和/或WPF应用程序中使用ASP.NET成员资格的文章。不幸的是,这些依赖于app.config文件。一旦发布,DLL似乎不使用app.config。如果我错了,请让我直截了当!文章在这里:http://aspalliance.com/1595_Client_Application_Services__Part_1.all

2 个答案:

答案 0 :(得分:2)

好吧,似乎设置SqlMembershipProvider的连接字符串的唯一方法是使用Initialize method,根据文档,不应该从我们的代码中调用它。

  

初始化SQL Server成员资格   具有属性值的提供者   在ASP.NET应用程序中指定的   配置文件。这种方法不是   打算直接用于你的   代码。

所以基本上我们必须想办法把这些信息放到与托管dll的应用程序相关的配置文件中。

您需要做的就是在程序集中引用system.web.dllsystem.configuration.dll,使用SqlMembershipProvider,然后在app.config中为可执行文件设置正确的值,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MembershipConnectionString" connectionString="connectionstringdetails" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <membership defaultProvider="DefaultSqlMembershipProvider">
      <providers>
        <clear />
        <add name="DefaultSqlMembershipProvider" connectionStringName="MembershipConnectionString" type="System.Web.Security.SqlMembershipProvider" />
      </providers>
    </membership>
  </system.web>
</configuration>

需要注意的重要一点是,如果您使用“MyAssembly.dll”和“TheApp.exe”,则应为“TheApp.exe.config”,而不是“MyAssembly.dll.config”。配置文件始终与正在执行的程序集关联。

答案 1 :(得分:0)

在网站中,当应用程序启动时(global.asax中的Application_Start),您可以将网站知道的成员资格提供程序的引用传递给您编写的DLL。 dll只需要System.Web.Security.MembershipProvider类型。这样,dll仍然可以从实现中调用所需的方法,但是在编译时不知道提供者的运行时类型(这就是所谓的依赖注入)。