У меня есть приложение 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-объекты «Членство» и воссоздаю пользователя, он работает нормально.