过去几年我在网络应用中使用了会员提供商。我现在对工作中的内部项目有一个新的“请求”。他们希望服务(不是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答案 0 :(得分:2)
好吧,似乎设置SqlMembershipProvider的连接字符串的唯一方法是使用Initialize method,根据文档,不应该从我们的代码中调用它。
初始化SQL Server成员资格 具有属性值的提供者 在ASP.NET应用程序中指定的 配置文件。这种方法不是 打算直接用于你的 代码。
所以基本上我们必须想办法把这些信息放到与托管dll的应用程序相关的配置文件中。
您需要做的就是在程序集中引用system.web.dll
和system.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仍然可以从实现中调用所需的方法,但是在编译时不知道提供者的运行时类型(这就是所谓的依赖注入)。