Base solution for your next web application

Activities of "gconey"

Answer

That's a great shame as I've invested a huge amount of time developing my application and don't have time to rewrite it now. I've just paid your fee ASP.Net Zero renewal as well. Will you continue to support the Angular 1.x non-core versions? Is there any chance you'll add the new features to them at some later date? What do you suggest people in my situation do?

Question

Hi,

Will the Angular 1.x version of Asp.Net Zero get the new features 4.1, i.e. Tenant Subscription System, Payment Integration and new dashboards?

I need these new features but I don't want to rewrite my app.

Regards, George

Great news. Thanks a lot.

This is a problem for me too. Is there any progress on this?

Hi,

I've logged this here: [https://github.com/aspnetzero/aspnet-zero/issues/451])

I logged it against the Angular 1.x version of ASP.NET Zero as that's what I'm using.

Answer

I've updated ui-iconpicker for use in ASP.Net Zero: I added an icon search facility, added all the new icons and sorted out the styling for use with Metronic. If anyone needs an icon picker in their app let me know and I'll send you it.

[attachment=0:2n38bzsj]Icon Picker.jpg[/attachment:2n38bzsj]

I've deployed my application to Azure and all seems to work well except when I try to download all logs (from Admin, Maintenance). This works fine running locally but from Azure it fails with an internal error and the following showing in the log.

2017-02-22 00:48:19,924 [38 ] nHandling.AbpApiExceptionFilterAttribute - size was 3375666, but I expected 3375256
ICSharpCode.SharpZipLib.Zip.ZipException: size was 3375666, but I expected 3375256
at ICSharpCode.SharpZipLib.Zip.ZipOutputStream.CloseEntry()
at ICSharpCode.SharpZipLib.Zip.ZipOutputStream.Finish()
at ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream.Close()
at System.IO.Stream.Dispose()
at Cybertron.Sched.Logging.WebLogAppService.DownloadWebLogs()
at Castle.Proxies.WebLogAppServiceProxy.DownloadWebLogs_callback()
at Castle.Proxies.Invocations.IWebLogAppService_DownloadWebLogs.InvokeMethodOnTarget()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Authorization.AuthorizationInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformSyncUow(IInvocation invocation, UnitOfWorkOptions options)
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformUow(IInvocation invocation, UnitOfWorkOptions options)
at Abp.Domain.Uow.UnitOfWorkInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Auditing.AuditingInterceptor.PerformSyncAuditing(IInvocation invocation, AuditInfo auditInfo)
at Abp.Auditing.AuditingInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Runtime.Validation.Interception.ValidationInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.WebLogAppServiceProxy.DownloadWebLogs()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Abp.WebApi.Controllers.Dynamic.Interceptors.AbpDynamicApiControllerInterceptor`1.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.DynamicApiController`1Proxy_20.DownloadWebLogs()
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.&lt;InvokeActionAsyncCore&gt;d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Abp.WebApi.Uow.AbpApiUowFilter.&lt;ExecuteActionFilterAsync&gt;d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Abp.WebApi.Validation.AbpApiValidationFilter.&lt;ExecuteActionFilterAsync&gt;d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Abp.WebApi.Auditing.AbpApiAuditFilter.&lt;ExecuteActionFilterAsync&gt;d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.&lt;ExecuteAsync&gt;d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Abp.WebApi.Security.AntiForgery.AbpAntiForgeryApiFilter.&lt;ExecuteAuthorizationFilterAsync&gt;d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Abp.WebApi.Authorization.AbpApiAuthorizeFilter.&lt;ExecuteAuthorizationFilterAsync&gt;d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.AuthenticationFilterResult.&lt;ExecuteAsync&gt;d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.&lt;ExecuteAsync&gt;d__0.MoveNext()e

Any ideas what is going wrong? Thanks.

Answer

If anyone needs uiGrids that take up available window height I've developed a much better way of doing it:

Add the following directive called fullHeightGrid.js:

(function () {
    appModule.directive('fullHeightGrid', ['$timeout', '$window',
        function ($timeout, $window) {
            return {
                restrict: 'A',
                scope: false,
                require: 'uiGrid',
                link: function (scope, element, attrs, uiGridCtrl) {
                    var setGridHeight = function () {                        
                        var windowHeight = window.innerHeight;
                        var gridTop = getGridTop();
                        var gridHeight = windowHeight - gridTop - 40;
                        if (gridHeight < 380) gridHeight = 380;
                        $(element).height(gridHeight);
                        uiGridCtrl.grid.api.core.handleWindowResize();
                    };

                    var getGridTop = function () {
                        return $(element)[0].getBoundingClientRect().top + document.documentElement.scrollTop;
                    };

                    $timeout(setGridHeight);
                    angular.element($window).bind('resize', setGridHeight);

                    scope.$watch(function () {
                        return getGridTop();
                    }, function (gridTop) {
                        setGridHeight();
                    });
                }
            };
        }
    ]);
})();

Then add the directive to your grids, e.g.:

<div ui-grid="vm.gridOptions" ui-grid-pagination ui-grid-resize-columns full-height-grid dir=@(CultureHelper.IsRtl ? "rtl" : "")></div>

This works with all grids including the ones that come with the Framework.

Hi,

Was this logged and/or fixed? I can't find the issue in GitHub. I agree this password should be encrypted.

Regards, George

Answer

Ok, will do. I don't know why you can't reproduce this issue. It's odd as I can reproduce it easily.

I tried a few more things:

Updated to Abp 1.4.1 & Abp.Zero 1.4.0 - No change. Problem still occurs.

Tried with a different pair of parent child tables - the problem still occurred.

Put the code in a non-transnational uow. This then worked (but this isn't a solution). This indicates the problem is with transaction handling as I suspected. i.e. this works:

public async Task TestInsert()
{
    using (var unitOfWork = _unitOfWorkManager.Begin(System.Transactions.TransactionScopeOption.Suppress))
    {
        var attributeHeader = new AttributeHeader();
        await _attributeHeaderRepository.InsertAndGetIdAsync(attributeHeader);

        var attributeValue = new AttributeValue()
        {
            AttributeHeaderId = attributeHeader.Id,
            AttributeTypeId = 124,
            AttributeType = null,
            Value = "test"
        };
        await _attributeValueRepository.InsertAsync(attributeValue);

        //_unitOfWorkManager.Current.SaveChanges();
        unitOfWork.Complete();
    }
}
Showing 11 to 20 of 40 entries