【问题标题】:SqlRoleProvider: NullReferenceException when calling Roles.GetRolesForUserSqlRoleProvider:调用 Roles.GetRolesForUser 时出现 NullReferenceException
【发布时间】:2014-03-05 01:24:31
【问题描述】:

场景: WCF 服务使用 SqlRoleProvider 对 Sql Server 2012 数据库服务器进行身份验证。 WCF 托管在 IIS7 网络服务器上。

请查看此错误:

System.NullReferenceException:对象引用未设置为对象的实例。
在 System.Web.Security.Roles.GetRolesForUser(字符串用户名)

角色管理已启用。

在我的本地开发机器(服务器 2012,iis7)上,这工作正常。当我登录并调用该方法时,将检索角色。

在另一台服务器(测试环境)上它不工作。我可以登录(用户通过用户身份验证并通过 sql server 数据库)但是当我尝试检索该用户的角色时,我得到一个 nullreferenceexception。

这怎么可能,有没有人知道这个问题可能发生在哪里?

最好的问候。

【问题讨论】:

    标签: wcf authentication iis-7 sql-server-2012 sqlroleprovider


    【解决方案1】:

    blergh

    如果我遇到这个网站,请使用 Stack Overflow 标签进行谷歌搜索: http://www.lhotka.net/weblog/CallingRolesGetRolesForUserInAWCFService.aspx

    简而言之: 显然 .net 3.5 和 .net 4 之间出现了问题。

    要解决此问题,请致电:

    string[] roles = Roles.Provider.GetRolesForUser(ServiceSecurityContext.Current.PrimaryIdentity.Name);
    

    而不是

    string[] roles = Roles.GetRolesForUser(ServiceSecurityContext.Current.PrimaryIdentity.Name);
    

    区别在于添加在中间的.Provider。添加后效果很好。

    【讨论】:

    • 这对我有用,但我也必须调整所有出现的对“IsUserInRole()”的调用。奇怪的是,只有在使用 VS2013 启动解决方案时才需要修复。当在完全相同的机器上使用 VS2010 启动时,调用无需修改即可工作。仅供参考,如果重要的话,我有一个 .NET 3.5 WCF 项目。
    • 我遇到了同样的问题。我在 Web.config 中向用户 Roles.GetRolesForUser 添加了以下行,否则您必须使用用户 Roles.Provider.GetRolesForUser。我正在使用启用了 OWIN 中间件的 MVC5。
    【解决方案2】:

    这个问题听起来像这个 asp.net 错误。

    connect.microsoft.com

    一种解决方法是调整您的 Web 服务器跟踪级别。例如,在 web.config 文件中添加以下设置可以解决问题,

    <system.webServer>
        <tracing>
         <traceFailedRequests>
            <remove path="*"/>
            <add path="*">
             <traceAreas>
                <add provider="ASP" verbosity="Verbose" />
                <!-- Note that the verbosity is set to Warning (default value is Verbose)-->
                <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Warning" />
                <add provider="ISAPI Extension" verbosity="Verbose" />
                <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
             </traceAreas>
             <failureDefinitions statusCodes="200-999" />
            </add>
         </traceFailedRequests>
        </tracing>
    </system.webServer>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2018-03-25
      • 1970-01-01
      • 2012-06-25
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多