Wcf SqlRoleProvider:NullReferenceException调用Roles.GetRolesForUser时发生异常
情景: WCF服务使用SqlRoleProvider与Sql Server 2012数据库服务器进行身份验证。WCF托管在IIS7 Web服务器上 请查看此错误: System.NullReferenceException:对象引用未设置为对象的实例。Wcf SqlRoleProvider:NullReferenceException调用Roles.GetRolesForUser时发生异常,wcf,authentication,iis-7,sql-server-2012,sqlroleprovider,Wcf,Authentication,Iis 7,Sql Server 2012,Sqlroleprovider,情景: WCF服务使用SqlRoleProvider与Sql Server 2012数据库服务器进行身份验证。WCF托管在IIS7 Web服务器上 请查看此错误: System.NullReferenceException:对象引用未设置为对象的实例。 位于System.Web.Security.Roles.GetRolesForUser(字符串用户名) 角色管理已启用 在我的本地开发机器(Server2012,iis7)上,这工作正常。当我登录并调用该方法时,将检索角色 在另一台服务器(测试环
位于System.Web.Security.Roles.GetRolesForUser(字符串用户名) 角色管理已启用 在我的本地开发机器(Server2012,iis7)上,这工作正常。当我登录并调用该方法时,将检索角色 在另一台服务器(测试环境)上,它不工作。我可以登录(用户通过用户身份验证并通过sql server数据库),但当我尝试检索该用户的角色时,会得到一个nullreferenceexception 这是怎么可能的,有人知道这个问题可能发生在哪里吗 致以最诚挚的问候。 如果我遇到这个网站,用标签堆栈溢出进行谷歌搜索: 简言之: 显然,在.NET3.5和.NET4之间出现了一些问题 要解决此问题,请致电:
string[] roles = Roles.Provider.GetRolesForUser(ServiceSecurityContext.Current.PrimaryIdentity.Name);
而不是
string[] roles = Roles.GetRolesForUser(ServiceSecurityContext.Current.PrimaryIdentity.Name);
<> >差异在<代码>。添加此选项后,效果良好。此问题听起来像是asp.net错误 解决方法是调整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>
这对我现在很有效,但我也必须调整所有调用“IsUserInRole()”的情况。奇怪的是,只有在VS2013启动解决方案时才需要修复。当使用VS2010在完全相同的机器上启动时,调用可以在不进行修改的情况下工作。仅供参考,我有一个.NET3.5WCF项目,如果这很重要的话。我也有同样的问题。我在Web.config中将以下行添加到user Roles.GetRolesForUser中,否则您必须添加到user Roles.Provider.GetRolesForUser。我正在使用启用OWIN中间件的MVC5。