private IPrincipal SetCurrentThreadPrincipal(ServiceSecurityContext securityContext, out bool isThreadPrincipalSet)
 {
     IPrincipal currentPrincipal = null;
     IPrincipal windowsPrincipal = null;
     if (this.principalPermissionMode == PrincipalPermissionMode.UseWindowsGroups)
     {
         windowsPrincipal = this.GetWindowsPrincipal(securityContext);
     }
     else if (this.principalPermissionMode == PrincipalPermissionMode.UseAspNetRoles)
     {
         windowsPrincipal = new RoleProviderPrincipal(this.roleProvider, securityContext);
     }
     else if (this.principalPermissionMode == PrincipalPermissionMode.Custom)
     {
         windowsPrincipal = GetCustomPrincipal(securityContext);
     }
     if (windowsPrincipal != null)
     {
         currentPrincipal = Thread.CurrentPrincipal;
         Thread.CurrentPrincipal = windowsPrincipal;
         isThreadPrincipalSet = true;
         return currentPrincipal;
     }
     isThreadPrincipalSet = false;
     return currentPrincipal;
 }
        IPrincipal SetCurrentThreadPrincipal(ServiceSecurityContext securityContext, out bool isThreadPrincipalSet)
        {
            IPrincipal result = null;
            IPrincipal principal = null;

            ClaimsPrincipal claimsPrincipal = OperationContext.Current.ClaimsPrincipal;

            if (this.principalPermissionMode == PrincipalPermissionMode.UseWindowsGroups)
            {
                principal = ( claimsPrincipal is WindowsPrincipal ) ? claimsPrincipal : GetWindowsPrincipal( securityContext );
            }
            else if (this.principalPermissionMode == PrincipalPermissionMode.UseAspNetRoles)
            {
                principal = new RoleProviderPrincipal(this.roleProvider, securityContext);
            }
            else if (this.principalPermissionMode == PrincipalPermissionMode.Custom)
            {
                principal = GetCustomPrincipal(securityContext);
            }
            else if (this.principalPermissionMode == PrincipalPermissionMode.Always)
            {
                principal = claimsPrincipal ?? new ClaimsPrincipal( new ClaimsIdentity() );
            }

            if (principal != null)
            {
                result = Thread.CurrentPrincipal;
                Thread.CurrentPrincipal = principal;
                isThreadPrincipalSet = true;
            }
            else
            {
                isThreadPrincipalSet = false;
            }

            return result;
        }