ASP.NET TableStorageProvider для таблиц Azure не являются постоянными пользователями? - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть приложение Windows Azure Webrole, использующее Silverlight поверх WCF + ASP.NET.Я нашел этот полезный поставщик ASP.NET для таблиц Azure в образцах Azure и реализовал его.Я аутентифицирую своих пользователей с помощью службы WCF System.Web.ApplicationServices.AuthenticationService.

Это прекрасно работает: я создаю своих пользователей с очень простой формой ASP.NET, затем я захожу в приложение Silverlight и успешно аутентифицируюсь, но когда я выключаю среду хранения разработки Azure и перезапускаю ее, я могу 'Войдите снова, даже если пользователь все еще находится в таблице членства.Я отладил процесс регистрации и обнаружил, что когда провайдер выполняет запрос к таблице, он выдает исключение в этом методе:

private MembershipRow GetUserFromTable(DataServiceContext svc, string username)
    {
        SecUtility.CheckParameter(ref username, true, true, true, Constants.MaxTableUsernameLength, "username");

        DataServiceQuery<MembershipRow> queryObj = svc.CreateQuery<MembershipRow>(_tableName);

        var query = (from user in queryObj
                     where user.PartitionKey == SecUtility.CombineToKey(_applicationName, username) &&
                           user.ProfileIsCreatedByProfileProvider == false
                     select user).AsTableServiceQuery();

        IEnumerable<MembershipRow> allUsers = query.Execute();
        if (allUsers == null)
        {
            return null;
        }
        IEnumerator<MembershipRow> e = allUsers.GetEnumerator();
        if (e == null)
        {
            return null;
        }
        // e.Reset() throws a not implemented exception
        // according to the spec, the enumerator is at the beginning of the collections after a call to GetEnumerator()
        if (!e.MoveNext())
        {
            return null;
        }
        MembershipRow ret = e.Current;
        if (e.MoveNext())
        {
            throw new ProviderException("Duplicate elements for primary keys application and user name.");
        }
        return ret;
    }

переменная queryObj содержит запись пользователя, когда я проверяю во время выполнения,но query похоже, что оно содержит исключение в одном из его членов.Наконец, выполнение завершается неудачно при создании e.moveNext().

Если я просто удаляю все таблицы и BLOB-объекты «Членство» и воссоздаю пользователя, он работает нормально.

1 Ответ

0 голосов
/ 05 мая 2011

Образцы из SDK не готовы к производству. Существуют более новые версии Windows Azure Toolkit для Windows Phone 7 и Windows Azure Training Kit . У вас могут возникнуть проблемы в среде разработчика, если вы не выключаете браузер между различными пользовательскими сеансами из-за того, что управление сеансами в хранилище больших двоичных объектов не очищается. Мы использовали их в нашей книге и протестировали без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...