相关文章推荐
胆小的橙子  ·  使用Xunit.DependencyInje ...·  1 年前    · 
乐观的跑步机  ·  Win11 ...·  1 年前    · 
重感情的大象  ·  Flutter ...·  1 年前    · 

ASP.NET角色类抛出SQL网络接口,错误:26

0 人关注

我的家庭电脑运行的是Visual Studio 2012和SQL Server 2008 R2。这个网站一直在我的工作电脑上运行VWD10/SQLEXPRESS。我可以访问和运行所有的页面,但我的admin.aspx页面除外。

登录成功后,我点击了我的Admin,aspx页面,该页面只有一个loginview控件,后面没有代码。 网站挂起,然后我得到了错误。

在建立与SQL Server的连接时,发生了一个与网络有关的或特定实例的错误。没有找到该服务器或无法访问。验证实例名称是否正确,SQL Server是否被配置为允许远程连接。(提供者。SQL网络接口,错误:26 - 定位指定的服务器/实例错误)

我删除了loginview控件,并再次尝试。没有代码的页面和控件正常加载。 我的下一次尝试是在页面加载时添加。

string str = Roles.GetRolesForUser("Admin").First();

这导致了同样的错误,此后我又将我的页面恢复到没有代码和一个loginview控件的状态。

我不知道为什么Role类不能访问数据库,而membership类可以。

这是我的web.config,我怀疑这就是问题所在

    <?xml version="1.0" encoding="utf-8"?>
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
<configuration>
  <location path="~/Admin.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager,Supervisor" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Machines.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Workcenters.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Procedure.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager,Supervisor" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Users.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Section.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Tensile.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Procedures">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <system.web>
    <roleManager enabled="true" />
    <authentication mode="Forms" />
    <membership defaultProvider="myProvider">
      <providers>
        <add name="myProvider"  type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="userdb" enablePasswordRetrieval="false" 
        enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" 
        requiresUniqueEmail="True" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
        minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
        passwordStrengthRegularExpression="" />
      </providers>
    </membership>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
      <buildProviders>
        <add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
      </buildProviders>
    </compilation>
  </system.web>
  <connectionStrings>
    <!--Home/School connection(SQLSERVER 2008 R2-->
    <add name="QualityEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=QUALITY.MDF;user id=sa;password=****;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <add name="userdb" connectionString="Data Source=.;Initial Catalog=ASPNETDB;uid=sa;Password=****" />
    <!--Work Connection(SQLEXPRESS)-->
    <!--<add name="QualityEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\Quality.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
    <!--<add name="userdb" connectionString="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\ASPNETDB.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;" />-->
  </connectionStrings>
</configuration>
    
1 个评论
会员类可以访问用户数据库,角色类不能。第二个连接字符串被注释出来,以便在工作/家庭电脑之间轻松切换。
asp.net
sql-server
sql-server-2008
Kevin Howe
Kevin Howe
发布于 2013-01-13
1 个回答
Kevin Howe
Kevin Howe
发布于 2013-01-13
已采纳
0 人赞同

所以问题是我没有定义角色提供者,所以它使用了sqlxpress的角色提供者。 我家里的电脑没有sqlxpress,这就是为什么数据库在我的工作电脑上工作,而不是在我家里的电脑上。 我可以登录的原因是我配置了一个成员提供者。

为了解决这个问题,我把

<roleManager enabled="true" />
<roleManager defaultProvider="myRoleProvider" enabled="true">
  <providers>
    <clear/>
      name="myRoleProvider"
      type="System.Web.Security.SqlRoleProvider"