Win10下MySql ASP.NET Identity意外绑定SQL Server

Posted

技术标签:

【中文标题】Win10下MySql ASP.NET Identity意外绑定SQL Server【英文标题】:MySql ASP.NET Identity unexpectedly binding to SQL Server under Win10 【发布时间】:2016-05-06 11:35:05 【问题描述】:

我有一个实时 Web 应用程序(ASP.NET 4.5.1、MVC 5.2.3、EF 6.1、mysql 5.1.35),它在 MS Server2008R2(Web) 上运行了几个月,没有任何困难。

我正在尝试将我的开发环境移动到 Win10 虚拟机(以前是 Win7 虚拟机),并在 VS2015 的新机器上打开实时系统和复制数据库的副本。

运行应用程序时(我使用 asp.net Identity 1.0 进行身份验证)我的 _layout.vbhtml 页面中出现以下异常:

“System.Data.SqlClient.SqlException”类型的异常发生在 System.Web.dll 但未在用户代码中处理

附加信息:网络相关或特定于实例的错误 在建立与 SQL Server 的连接时发生。服务器是 未找到或无法访问。验证实例名称是否为 正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位 服务器/实例指定)

在:

            <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav" style="width:auto;white-space: nowrap;">
                @If (Request.IsAuthenticated) Then
                    @<li>@Html.ActionLink("Home", "Index", New With .Area = "", .controller = "Home")</li>

                    If **User.IsInRole("Salesman")** Then

由于我没有使用 SQLServer,所以没有处理异常也就不足为奇了...

我很困惑为什么用户对象(System.Web.Security.RolePrincipal)使用 SQLClient 而不是 MySQLClient 指定的:

Public Class ApplicationDbContext
    Inherits IdentityDbContext(Of ApplicationUser)
    Public Sub New()
        MyBase.New("IMSSecurityEntities")
    End Sub

Web.config:

  <connectionStrings>
    <add name="IMSSecurityEntities" connectionString="data source=localhost;database=db1;Uid=root;Pwd=password;" providerName="mysql.data.mysqlclient" />

同样的项目在Server2008R2机器上运行VS2015时正确连接到MySQL数据库。

asp.net Identity 是否会在某些情况下“退回”到使用 SQLServer?

【问题讨论】:

【参考方案1】:

进行了更多挖掘和谷歌搜索,并在以下位置找到了解决方案:User.IsInRole doesn't work

将以下内容添加到 web.config 解决了该问题:

<modules>
    <remove name="RoleManager" />
</modules>

RoleManager 默认为SimpleMembership。我不知道为什么这在一台机器上不是问题,但在另一台机器上却有问题,但显然某处存在歧义,这对其进行了排序。

【讨论】:

以上是关于Win10下MySql ASP.NET Identity意外绑定SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

亲测Asp.net Mvc5 + EF6 code first 方式连接MySQL总结

win7 IIS环境下怎么搭建PHP环境?具体怎样配置

在 IIS 10 中注册 asp.net

linux下怎样运行asp.net+SqlServer

asp.net网站连接MYSQL 提示 Access denied for user 'root'@'localhost' (using password: YES)

ASP.net怎么连接mysql数据库进行数据操作?