SqlRoleProvider:调用Roles.GetRolesForUser时出现NullReferenceException

时间:2014-02-07 15:03:32

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

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

请看这个错误:

  

System.NullReferenceException:未将对象引用设置为对象的实例           在System.Web.Security.Roles.GetRolesForUser(String username)

已启用RoleManagement。

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

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

这怎么可能,是否有任何人可以找到可能出现此问题的方法?

最好的问候。

2 个答案:

答案 0 :(得分:14)

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。添加后,它工作正常。

答案 1 :(得分:1)

这个问题听起来像这个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>