用于Azure表的ASP.NET TableStorageProvider不会使用户持久化?

时间:2010-09-09 08:31:16

标签: c# asp.net azure membership-provider

我在WCF + ASP.NET上使用Silverlight有一个windows azure Webrole应用程序。我在Azure samples中为Azure表找到了这个有用的ASP.NET提供程序并实现了它。我使用WCF服务System.Web.ApplicationServices.AuthenticationService对我的用户进行身份验证。

效果很好:我使用非常简单的ASP.NET表单创建用户,然后我转到我的Silverlight应用程序并成功进行身份验证,但是当我关闭Azure开发存储环境并重新启动它时,我无法登录再次,即使用户仍在Membership表中。 我调试了日志记录过程,发现当提供程序对表执行查询时,它会在此方法中引发异常:

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()时执行失败。

如果我只是删除所有的Membership表和blob并重新创建一个用户,它就可以正常工作。

1 个答案:

答案 0 :(得分:0)

来自sdk的样本尚未准备就绪。 Windows Azure Toolkit for Windows Phone 7Windows Azure Training Kit中有更新的版本。如果您不在不同用户会话之间关闭浏览器,则可能在开发环境中遇到问题,因为blob存储中的会话管理未被清除。我们在book中使用过它们并且没有问题进行测试。