【问题标题】:using asp.net membership provider in a dll在 dll 中使用 asp.net 成员资格提供程序
【发布时间】:2010-12-29 18:07:58
【问题描述】:

在过去的几年里,我在网络应用程序中使用了 Membership Providers。我现在对工作中的内部项目有一个新的“请求”。他们想要一个服务(而不是 Web 服务)来进行快速身份验证。基本上,公开 ValidateUser(UserName, Password) 方法...

我正在将它构建在一个 DLL 中,该 DLL 将与我们的内部网站一起放置。完成这项工作的最佳方法是什么? DLL 将引用网络应用,而网络应用引用 DLL。如何让 DLL 知道 Membership Provider?

TIA

PS:如果这已经在其他地方得到回答,请引导我到那个...

编辑:我找到了一篇关于将 ASP.NET 成员资格与 WinForms 和/或 WPF 应用程序一起使用的文章。不幸的是,这些依赖于 app.config 文件。 DLL 似乎在发布后不使用 app.config。如果我错了,请纠正我!文章在这里:http://aspalliance.com/1595_Client_Application_Services__Part_1.all

【问题讨论】:

  • 你说的是 SqlMembershipProvider 吗?我对您要完成的工作感到困惑。 SqlMembershipProvider 本质上已经在一个 dll 中(实际上是 System.Web.dll),只需配置 machine.config/web.config 即可使用。
  • 是的,SqlMembershipProvider。但是,我是从我自己的 DLL 而不是 Web 应用程序本身运行它。 DLL 无权访问 Web 配置。所以问题是如何让 SqlMembershipProvider 在没有配置信息的情况下能够连接。

标签: dll asp.net-membership


【解决方案1】:

好吧,似乎设置 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”。配置文件始终与正在执行的程序集相关联。

【讨论】:

  • 没有 (.NET) 可执行文件。在一种情况下,它会被 ColdFusion 应用程序调用。
  • 我不知道它是如何工作的,我什至不知道你能做到这一点。在不了解冷融合的工作原理或它如何在不支持配置文件的情况下托管 .Net 的情况下,我建议尝试 Initialize 方法。
【解决方案2】:

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

【讨论】:

  • 由于我们当前的架构,网站并不总是“运行”。我们有几个 DLL,它们通过 WebOrb 向我们在其他人网站上的小部件提供信息。我目前正在编写一组自定义的提供程序,我可以在其中传递配置信息。到目前为止,这看起来最有希望。
猜你喜欢
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2010-11-20
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多