7

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

请看这个错误:

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

角色管理已启用。

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

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

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

此致。

4

2 回答 2

14

布莱尔

谷歌搜索标签堆栈溢出提供我遇到这个网站: 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中间添加了哪个。添加后它工作正常。

于 2014-02-07T15:15:29.283 回答
1

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

连接.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>
于 2015-03-12T01:24:59.407 回答