SqlRoleProvider: NullReferenceException при вызове Roles.GetRolesForUser

Сценарий: служба WCF, использующая SqlRoleProvider для аутентификации на сервере базы данных Sql Server 2012. WCF размещается на веб-сервере IIS7.

пожалуйста, посмотрите эту ошибку:

System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.
в System.Web.Security.Roles.GetRolesForUser(имя пользователя в строке)

Управление ролями включено.

На моей локальной машине разработки (сервер 2012, iis7) это работает нормально. Когда я вхожу в систему и вызываю метод, роли извлекаются.

На другом сервере (тестовая среда) он не работает. Я могу войти (пользователь проходит проверку подлинности с помощью пользователя и передается в базу данных сервера SQL), но когда я пытаюсь получить роли для этого пользователя, я получаю исключение nullreference.

Как это возможно, есть ли у кого-нибудь указания, где может возникнуть эта проблема?

С наилучшими пожеланиями.

2 ответа

Решение

blergh

Поиск в Google с тегами переполнения стека при условии, что я наткнулся на этот сайт: 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 который добавлен в середине. После добавления это работало нормально.

Эта проблема звучит как ошибка asp.net.

connect.microsoft.com

Обходной путь - настроить уровень трассировки вашего веб-сервера. Например, добавление следующих настроек в файл 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>
Другие вопросы по тегам