我在我的网站上使用ASP.NET 2012,SQL Server 2008和C#。当我执行以下代码时:
if(User.IsInRole("Admin"))
Response.Redirect("test.aspx");
在Default.aspx.cs
中并在本地Visual Studio中运行没有错误。部署我的网站并尝试使用Admin Role
服务器上出现以下错误的用户登录后:
发生与网络相关或特定于实例的错误 建立与SQL Server的连接。找不到服务器或 无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 查找服务器/实例时出错 指定)
我的ASP.NET成员资格数据库位于主机上。我应该在Default.aspx.cs
中使用连接字符串吗?如果是,我怎么能为此目的写作?
我确信我登录的User
位于Admin Role
。
web.config
:
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
</appSettings>
<connectionStrings>
<add name="MembersConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="SabteAKhabar"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="ConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="akhbarrConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="Off">
<error statusCode="403" redirect="access.aspx"/>
<error statusCode="404" redirect="nofile.aspx"/>
</customErrors>
<anonymousIdentification enabled="true"/>
<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="FirstName" allowAnonymous="false"/>
<add name="LastName" allowAnonymous="false"/>
<add name="AkharinMadrak" allowAnonymous="false"/>
<add name="Reshte" allowAnonymous="false"/>
<add name="Gerayesh" allowAnonymous="false"/>
<add name="NahveAshnayi" allowAnonymous="false"/>
<add name="Address" allowAnonymous="false"/>
<add name="PostalKod" allowAnonymous="false"/>
<add name="City" allowAnonymous="false"/>
<add name="Town" allowAnonymous="false"/>
<add name="Number" allowAnonymous="false"/>
<add name="BirthDay" type="System.DateTime" allowAnonymous="false"/>
</properties>
</profile>
<authorization>
<allow roles="Managers"/>
<allow roles="Admin"/>
<allow roles="AdminAsli"/>
</authorization>
<authentication mode="Forms">
<forms timeout="5" cookieless="AutoDetect" protection="All"/>
</authentication>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
</providers>
</membership>
<roleManager enabled="true"/>
<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false"/>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<httpRuntime/>
<machineKey validationKey="1234567890123456789012345678901234567890AAAAAAAAAA" decryptionKey="123456789012345678901234567890123456789012345678" validation="SHA1" decryption="Auto"/>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<add name="MSCaptcha" path="CaptchaImage.axd" verb="GET" type="MSCaptcha.CaptchaImageHandler, MSCaptcha" preCondition="integratedMode,runtimeVersionv2.0"/>
</handlers>
</system.webServer>
<system.net>
<mailSettings>
<smtp from="xxxxxx@gmail.com">
<network host="smtp.gmail.com" password="xxxxxx" port="587" userName="farzanehsd@gmail.com" enableSsl="true"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
答案 0 :(得分:1)
您的C#代码没有错误,因为错误消息清楚地告诉您。
连接到数据库时出错,这很可能是由配置文件中缺少或不正确的条目引起的。
示例配置:
<connectionStrings>
<add name="MembersConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="SabteAKhabar"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="ConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="akhbarrConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr"
providerName="System.Data.SqlClient" />
</connectionStrings>
参考/进一步阅读: 有关ASP.NET成员身份的配置方面的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx
由于您的会员申请名称为MyApplication
。您是否可以确保ApplicationId
数据库表中的aspnet_Applications
值与您的aspnet_Roles
表中的值匹配。
在aspnet_Roles
表中,您将找到当前ASP.NET成员资格角色的列表。您是否可以确保您的角色存在,并且ApplicationId值与aspnet_Applications
表中的值匹配。
您可以运行此查询以查看您已设置的角色以及ASP.NET成员资格应用程序:
SELECT APP.ApplicationId, APP.ApplicationName, ROLES.RoleName, ROLES.RoleId
FROM dbo.aspnet_Applications AS APP
JOIN dbo.aspnet_Roles AS ROLES ON APP.ApplicationId = ROLES.ApplicationId
答案 1 :(得分:1)
这与用户或角色无关。错误消息告诉您出错了什么以及该怎么做:您的程序无法访问您的SQL数据库,因此您需要检查它是否已正确设置。具体来说,检查:
Web.config
文件答案 2 :(得分:1)
您已经定义了会员提供商所需的所有详细信息 - 但角色提供商没有任何内容!
<!-- you're providing all the details for the membership provider ...... -->
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
</providers>
</membership>
<!-- but nothing at all really for the role provider. -->
<roleManager enabled="true"/>
See this blog post by Scott Allen关于如何定义角色提供程序详细信息,定义在何处查找信息以及使用哪个角色提供程序 - 并且与您为角色提供程序的成员身份执行的操作相同!