Activities of "enisn"

Hi,

Is there any logs on the browser console? Can you share ?

Can you give me some information on when this feature will be available?

It seems a nice & fancy feature so far, but whenever I checked the roadmap of the ABP team, I can't see this feature soon in the planned milestones. However you can still implement it on your own.

I already read https://abp.io/docs/latest/framework/real-time/signalr, but it is not specific to Blazor WASM

ABP framework doesn't provide a real-time notification system, it's an application logic your project needs. And it can be different depending on the case. There are several approaches you can consider:

  1. Web Push Notifications: This approach uses the browser's Push API to deliver notifications even when the application is not active. It's great for engaging users who aren't actively using your app and works across different browsers and devices. However, it requires user permission and may not be supported in all browsers.

  2. SignalR/WebSocket: This real-time communication approach establishes a persistent connection between client and server, enabling instant message delivery. It's ideal for real-time notifications as it provides immediate updates with minimal latency. The main advantages are bi-directional communication and efficient server resource usage. However, it may face challenges with firewalls, proxy servers, and requires maintaining open connections.

  3. Polling Mechanism: This traditional approach involves the client periodically requesting updates from the server (e.g., every 30 seconds). It's simple to implement and works reliably across all environments. The downside is that it can be resource-intensive due to frequent server requests, may miss real-time updates between polls, and can impact server performance with many concurrent users.

Given your utilization of Blazor WebAssembly within the .NET ecosystem, we recommend implementing SignalR as the optimal solution for real-time communication. This robust technology provides a seamless and efficient approach to WebSocket implementation with minimal complexity.

and I tried to implement it but I have problems both with the Hub management and with the use of reusable Blazor components inside the Lepton-x toolbar (https://abp.io/support/questions/8800/Double-Initialization-of-Custom-Toolbar-Component)

Sorry to see this, but it seems it's not a problem currently. There are 2 instances of a single component, and you can handle it easily by using another service that has single instance and inject it to the components. That service can be a singleton or a scoped service. (If you run your blazor app Blazor Server, it has to be scoped instead of singleton). That service can manage the hub connection and the notifications without dependency on a UI component.

Hi,

Unfortunately I couldn't reproduce the exact same issue.

Here some of questions to determine problem properly:

  • Which version of ABP Suite do you use? (Also your ABP version)
  • Did you add navigation manually in navigations tab? It should work without adding it

Hi,

Thanks for your report, We'll check this case as soon as possible

Hi,

ExtraProperties are stored as JSON in the database but whenever you read data, they'll be deserialized into a Dictionary in the C#.

But it seems you're using multi-level objects since you have only 1 key in your ExtraProperties. Since it's a Dictionary<string, object?> typed property, your value may be a JsonObject or Jobject depending on your configuration and serializer library. https://github.com/abpframework/abp/blob/fc9147ead4e226b1a4d56cd22b4fcd6357ecb15d/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs#L61

If you define specific types to your ExtraProperties or map them into separate columns, you can always use Object Extensions feature to congiure them: https://abp.io/docs/latest/framework/fundamentals/object-extensions

Hi,

Which solution template are you currently using the ABP Suite on?

There can be a race condition while acquiring the lock, hard to determine.

Can you reproduce it with newly created solution? Can you share us a minimal reproduction steps or the minimal application that reproduces the problem so we can check if there is a problem in framework level

It seems the team solved the problem, it'll be inlcuded in the next release

The microservices template in multi-tenant applications using outbox/inbox as it comes by default works properly only if the host and all tenants share the same database. Is that correct?

Yes, it's how it works for now. We'll consider a development on it soon. We put it ti our roadmap but it's tough topic to find a generic solution. You may customize services according to your own requirements for now.

On another note, I think it would be good to consider a simple way to configure the microservices template to support at least one database per tenant, since the SaaS module that implements this template includes that functionality, which is inconsistent with the microservices template.

Saas module is designed much earlier than this feature & micro-service template. Saas module doesn't know about other modules and features. It works with Layerd & Non-Layered templates very well, it also works with even MicroService only if you disable/remove inbox/outbox feature. But in that case there'll be no guarantee all the events will be delivered and executed correctly and applying the same transaction with DB operations and events.

Hi Enis,

How can I sure about if AbpAuthorizationService works on your gRPC request?

You can override it in your application and check if it's triggered to make sure it's executed. It implements Microsoft's default Microsoft.AspNetCore.Authorization.IAuthorizationService and replaces it in the dependency injection. If it's not triggered you'll need to configure it properly by following Microsoft's documentation: https://learn.microsoft.com/en-us/aspnet/core/grpc/authn-and-authz?view=aspnetcore-9.0

using System;
using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;

namespace YourComapnyName.YourProjetName.Web;

[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IAuthorizationService))]
public class CustomAbpAuthorizationService : AbpAuthorizationService
{
    public CustomAbpAuthorizationService(IAuthorizationPolicyProvider policyProvider, IAuthorizationHandlerProvider handlers, ILogger<DefaultAuthorizationService> logger, IAuthorizationHandlerContextFactory contextFactory, IAuthorizationEvaluator evaluator, IOptions<AuthorizationOptions> options, ICurrentPrincipalAccessor currentPrincipalAccessor, IServiceProvider serviceProvider) : base(policyProvider, handlers, logger, contextFactory, evaluator, options, currentPrincipalAccessor, serviceProvider)
    {
    }

    public override Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object? resource, IEnumerable<IAuthorizationRequirement> requirements)
    {
        // debugger here
        Console.WriteLine("AuthorizeAsync is called");
        return base.AuthorizeAsync(user, resource, requirements);
    }

    public override Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object? resource, string policyName)
    {
        // debugger here
        Console.WriteLine("AuthorizeAsync is called");
        return base.AuthorizeAsync(user, resource, policyName);
    }
}
Showing 191 to 200 of 779 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on November 04, 2025, 06:41