我正在与azure .net membershipprovider挣扎:两个问题:

时间:2013-08-29 03:50:20

标签: asp.net azure

我已经玩了好几年的各种版本了: 1)membershipprovider是否处理SQL Azure(或者其他任何存储提供程序(表,blob等))的瞬时连接故障? 2)为什么过去存在的存储过程消失了?我更喜欢SP应该是显而易见的原因。

2 个答案:

答案 0 :(得分:0)

我可以告诉你关于SP的事。 DefaultMembershipProvider现在似乎使用EF(或者可能是... ADO.Net)。这是我在System.Web.Providers.DefaultMembershipProvider

中找到的
internal static IQueryable<DbDataRecord> GetAllMembershipUsersLikeUserName(MembershipEntities ctx, string applicationName, string userName, int pageIndex = -1, int pageSize = -1)
{
  string queryString = QueryHelper.AppendUserNameSkipLimitIfNeeded("select u.UserName, u.UserId, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved, m.IsLockedOut, m.CreateDate, m.LastLoginDate, u.LastActivityDate, m.LastPasswordChangedDate, m.LastLockoutDate FROM Users as u, Memberships as m, Applications as a WHERE ToLower(a.ApplicationName) = @appName AND a.ApplicationId = m.ApplicationId AND m.UserId = u.UserId AND ToLower(u.UserName) LIKE @userName", pageIndex, pageSize);
  return (IQueryable<DbDataRecord>) ctx.CreateQuery<DbDataRecord>(queryString, new ObjectParameter("appName", (object) applicationName.ToLowerInvariant()), new ObjectParameter("userName", (object) userName.ToLowerInvariant()));
}

使用标准的CRUD查询,我没有看到你使用SP的意义,因为即使有任何性能也没有太大差异。

我在这里谈论通用提供商,一些细节here

答案 1 :(得分:0)

事实证明,除了SP问题,DefaultMembershipProvider不支持瞬态故障处理,但有一种方法......

问题here

有答案:创建一个新的提供者,从默认提供者继承,将其设置为默认提供者,然后你去:

 public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status)
    {
        MembershipCreateStatus tempstatus = 0;
        var something = retryPolicy.ExecuteAction(() =>
        {
            return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out tempstatus);
        });
        status = tempstatus;
        return something;
    }