SqlRoleProvider:调用 Roles.GetRolesForUser 时出现 NullReferenceException
Posted
技术标签:
【中文标题】SqlRoleProvider:调用 Roles.GetRolesForUser 时出现 NullReferenceException【英文标题】:SqlRoleProvider: NullReferenceException when calling Roles.GetRolesForUser 【发布时间】: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。
这怎么可能,有没有人知道这个问题可能发生在哪里?
最好的问候。
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于SqlRoleProvider:调用 Roles.GetRolesForUser 时出现 NullReferenceException的主要内容,如果未能解决你的问题,请参考以下文章