场景: WCF服务使用SqlRoleProvider与server 2012数据库服务器进行身份验证。WCF托管在IIS7 WCF服务器上。
请查看此错误:
System.NullReferenceException:对象引用没有设置为对象的实例。 (在System.Web.Security.Roles.GetRolesForUser(String用户名)
启用了RoleManagement。
在我的本地开发机器(服务器2012,iis7)上,这很好。当我登录并调用该方法时,将检索角色。
在另一个服务器(测试环境)上,它不工作。我可以登录(用户通过用户身份验证,并通过sql server数据库传递),但是当我试图检索该用户的角色时,我会得到一个nullreferenceexception。
这怎么可能,有没有人知道这个问题会在哪里发生呢?
诚挚的问候。
发布于 2014-02-07 15:15:29
http://www.urbandictionary.com/define.php?term=blergh
在Googling上搜索标签堆栈溢出,只要我看到这个站点: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,它是在中间添加的。在添加了这个之后,它工作得很好。
发布于 2015-03-12 01:24:59
这个问题听起来像一个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>https://stackoverflow.com/questions/21631032
复制相似问题