Intermittent CreateAsync SqlException while Creating an Umbraco Member

0

Intermittently I see that CreateAsync method throws the following SqlException while creating Umbraco members. Has anybody seen this before and hopefully fixed it please? This looks like an Umbraco bug which hasn't been reported, yet.

enter image description here

DB Logs:

System.Data.SqlClient.SqlException (0x80131904): New transaction is not allowed because there are other threads running in the session.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName, Boolean shouldReconnect) at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName) at System.Data.SqlClient.SqlC

Details:

Umbraco version 7.5.7 assembly: 1.0.6219.11990

Method that throws the exception intermittently:

 private static async Task<UmbracoApplicationMember> CreateMember(UmbracoMembersUserManager<UmbracoApplicationMember> uMgr, string loginName, string properName, UserLoginInfo loginInfo)
{
    var user = new UmbracoApplicationMember
    {
        Name = properName,
        UserName = loginName,
        Email = loginName
    };

    var result = await uMgr.CreateAsync(user); // This is where the exception is thrown intermittently
 // The rest of the code...

Further Details:

CreateAsync:

Assembly Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    //
    // Summary:
    //     Create a user with no password
    //
    // Parameters:
    //   user:
    [AsyncStateMachine(typeof(UserManager<,>.<CreateAsync>d__0))]
    [DebuggerStepThrough]
    public virtual Task<IdentityResult> CreateAsync(TUser user);

UmbracoIdentity:

      #region Assembly UmbracoIdentity, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// D:\tfs\MYPROJECT\DEV\WEB\MYPROJECT.Web\packages\UmbracoIdentity.Core.5.0.0\lib\net45\UmbracoIdentity.dll
#endregion

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Services;
using UmbracoIdentity.Models;

namespace UmbracoIdentity
{
    public class UmbracoMembersUserManager<TUser> : UserManager<TUser, int> where TUser : UmbracoIdentityMember, IUser<int>, new()
    {
        public UmbracoMembersUserManager(IUserStore<TUser, int> store);

        public override bool SupportsQueryableUsers { get; }
        public override bool SupportsUserLockout { get; }
        public override bool SupportsUserSecurityStamp { get; }
        public override bool SupportsUserTwoFactor { get; }
        public override bool SupportsUserPhoneNumber { get; }

        public static UmbracoMembersUserManager<TUser> Create(IdentityFactoryOptions<UmbracoMembersUserManager<TUser>> options, ILogger logger, ISqlSyntaxProvider sqlSyntax, UmbracoDatabase database, IMemberService memberService, IMemberTypeService memberTypeService, IMemberGroupService memberGroupService, IdentityEnabledMembersMembershipProvider membershipProvider = null);
        public static UmbracoMembersUserManager<TUser> Create(IdentityFactoryOptions<UmbracoMembersUserManager<TUser>> options, IMemberService memberService, IMemberTypeService memberTypeService, IMemberGroupService memberGroupService, IExternalLoginStore externalLoginStore = null, IdentityEnabledMembersMembershipProvider membershipProvider = null);
        public static UmbracoMembersUserManager<TUser> Create(IdentityFactoryOptions<UmbracoMembersUserManager<TUser>> options, UmbracoMembersUserStore<TUser> customUserStore, IdentityEnabledMembersMembershipProvider membershipProvider = null);
        protected override void Dispose(bool disposing);
    }
}

UmbracoApplicationMember:

        using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using UmbracoIdentity;
using UmbracoIdentity.Models;

namespace MYPROJECT.Web.Presentation.Models.UmbracoIdentity
{
    public class UmbracoApplicationMember : UmbracoIdentityMember
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<UmbracoApplicationMember, int> manager)
        {
            // Note the authenticationType must match the one 
            // defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

            // Add custom user claims here
            return userIdentity;
        }
    }
}
asp.net-identity
umbraco7
asked on Stack Overflow Apr 25, 2018 by Nurhak Kaya

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0