我的家庭计算机正在运行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类无法访问数据库,但成员类可以。
这是我的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="data source=.;initial catalog=QUALITY.MDF;user id=sa;password=****;multipleactiveresultsets=True;App=EntityFramework"" 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="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\Quality.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework"" 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>
答案 0 :(得分:1)
所以问题是我没有定义角色提供者,所以它使用了sqlexpress角色提供者。我的家用电脑没有sqlexpress,这就是数据库在我的工作电脑而不是家用电脑上工作的原因。我可以登录的原因是我已经配置了会员提供商。
解决我改变的问题
<roleManager enabled="true" />
到
<roleManager defaultProvider="myRoleProvider" enabled="true">
<providers>
<clear/>
<add
name="myRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="userdb"
applicationName="/" />
</providers>
</roleManager>