我在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并重新创建一个用户,它就可以正常工作。
答案 0 :(得分:0)
来自sdk的样本尚未准备就绪。 Windows Azure Toolkit for Windows Phone 7和Windows Azure Training Kit中有更新的版本。如果您不在不同用户会话之间关闭浏览器,则可能在开发环境中遇到问题,因为blob存储中的会话管理未被清除。我们在book中使用过它们并且没有问题进行测试。