【问题标题】:ASP.NET MVC Role Providers for MySQLMySQL 的 ASP.NET MVC 角色提供程序
【发布时间】:2011-04-18 09:53:13
【问题描述】:

我尝试使用article 设置角色提供者。

它部分工作 - 提供程序在 MySQL 中创建了一些表,但我无法从 ASP.NET 配置工具访问它。尝试添加一些角色(角色->创建或管理角色)时出现以下错误:

与 SQL Server 建立连接时出现与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)在 ASP 的 System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(布尔 isMembership,字符串方法名,对象 [] 参数,类型 [] 参数类型)。 security_roles_manageallroles_aspx.BindGrid() at ASP.security_roles_manageallroles_aspx.Page_Load() at System.Web.Util.CalliHelper.ArglessFunctionCaller(IntPtr fp, Object o) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System。 Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

我的连接字符串(用于使用 LINQ to MySQL(使用 dblinq)访问数据):

<connectionStrings>
<add name="ZenToolDB" connectionString="Database=zentool;Data Source=localhost;User Id=root;Password=supersecretpassword" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

任何想法,如何使它工作?谢谢!

编辑:添加了带有提供者的 web.config 片段:

<membership defaultProvider="MySqlMembershipProvider">
      <providers>
        <clear/>
        <add name="MySqlMembershipProvider"
             type="MySql.Web.Security.MySQLMembershipProvider,
             MySql.Web, Version=6.2.2.0, Culture=neutral,
             PublicKeyToken=c5687fc88969c44d"
             autogenerateschema="true"
             connectionStringName="ZenToolDB"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             requiresUniqueEmail="false"
             passwordFormat="Hashed"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="6"
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             passwordStrengthRegularExpression=""
             applicationName="/"/>
      </providers>
    </membership>
        <profile>
            <providers>
                <clear />
                <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ZenToolDB" applicationName="/" />
            </providers>
        </profile>
        <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
      <providers>
        <clear />
        <add connectionStringName="ZenToolDB" applicationName="/" name="AspNetSqlRoleProvider"
            type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <!--
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider"
            type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        -->
      </providers>
    </roleManager>

【问题讨论】:

    标签: asp.net-mvc roles roleprovider


    【解决方案1】:

    你的 web.config 中有一个角色提供者部分,你确定它指向新的角色提供者吗?如果不是,它可能正在尝试使用默认的 SQL 角色提供程序。

    默认看起来像这样,并使用System.Web.Security.SqlRoleProvider,这似乎是堆栈跟踪中的引用。

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
    
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>
    
    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
    

    【讨论】:

    • 您能否发布整个 web.config,包括角色管理器、成员资格和配置文件部分,因为堆栈跟踪似乎正在使用默认角色管理器。您链接的文章仅更改了成员资格部分,而不是角色管理部分。
    • 我添加了带有部分的 web.config 片段,您需要。
    • 哦,我现在明白了,可能是哪里出了问题。
    • 如果你找不到 MySQL 角色管理器,它很容易实现你自己的,你只需要使用 System.Web.Security.RoleProvider (msdn.microsoft.com/en-us/library/…) 作为基类并实现 8 或 10 抽象职能。从对它一无所知到启动并运行大约需要一两个小时。
    • MySQL .NET 连接器有自己的角色提供者。我不得不将 System.Web.Security.SqlRoleProvider 更改为 MySql.Web.Security.MySQLRoleProvider。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2010-11-21
    • 2017-06-15
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多