Wcf SqlRoleProvider:NullReferenceException调用Roles.GetRolesForUser时发生异常

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)上,这工作正常。当我登录并调用该方法时,将检索角色 在另一台服务器(测试环

情景: WCF服务使用SqlRoleProvider与Sql Server 2012数据库服务器进行身份验证。WCF托管在IIS7 Web服务器上

请查看此错误:

System.NullReferenceException:对象引用未设置为对象的实例。
位于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。