User.IsInRole无法在服务器上运行

时间:2014-03-22 14:37:32

标签: c# asp.net sql-server

我在我的网站上使用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>

3 个答案:

答案 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数据库,因此您需要检查它是否已正确设置。具体来说,检查:

  • 您的SQL服务器正在运行
  • 您的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关于如何定义角色提供程序详细信息,定义在何处查找信息以及使用哪个角色提供程序 - 并且与您为角色提供程序的成员身份执行的操作相同!