AZMan: InitializeClientContextFromName завершается с ошибкой «Значение не попадает в ожидаемый диапазон». - PullRequest
3 голосов
/ 05 мая 2011

Следующий код завершается с ошибкой в ​​InitializeClientContextFromName со значением «Значение не попадает в ожидаемый диапазон». Работает на машине другого разработчика.

какие-нибудь подсказки, которым я должен следовать? Я совсем не знаком с AzMan ...

    private List<string> SyncAzManRoles(ActiveDirectoryMembershipProvider provider)
    {
        List<string> userAzManRoles = new List<string>();

        AzAuthorizationStoreClass store = new AzAuthorizationStoreClass();
        if (store == null)
        {
            AuthTrace("Azman store is not available");
            throw new InvalidOperationException("The azman store is not available");
        }
        store.Initialize(0, ConfigurationManager.ConnectionStrings
                    ["LocalPolicyStore"].ConnectionString, null);

        IAzApplication3 app = store.OpenApplication(Security.ApplicationName, null) as IAzApplication3;
        if (app == null)
        {
            AuthTrace("Azman application is not available");
            throw new InvalidOperationException("The azman application is not available");
        }

        IAzClientContext3 clientContext = null;
        try
        {
            clientContext = app.InitializeClientContextFromName(_username,
                provider.Name, null) as IAzClientContext3;

1 Ответ

2 голосов
/ 06 мая 2011

Я решил эту проблему с помощью метода InitializeClientContextFromToken вместо InitializeClientContextFromName.

В моем случае он использовался внутри веб-приложения ASP.NET

ulong token = 0;

var principal = User as WindowsPrincipal;
if ( principal != null )
{
    var identity = (WindowsIdentity) principal.Identity;

    ViewBag.Identity = identity.Name;
    token = (ulong) identity.Token.ToInt64();
}

// Server 2008 or Vista required to use IAzClientContext3
// Using token 0 uses app pool identity
var _clientContext = (IAzClientContext3) _azManApp.InitializeClientContextFromToken( token );

Если вы передаете ноль в качестве значения токена, для веб-приложений, в результате которых используется идентификатор пула приложений.В противном случае, если пользователь вошел в систему с помощью WindowsIdentity, значение свойства Token также будет работать.

Для настольного приложения вы, вероятно, можете просто использовать нулевой токен для использования идентификатора текущего пользователя.

...