Base solution for your next web application

Activities of "oguzhanagir"

Hi @Prasanthtp

Thanks for your feedback. You can follow these developments in this issue.

Hi @Prasanthtp

Deploying an MVC project with an Azure pipeline has the same logic as deploying a public website with an Azure pipeline. Here you can only skip the Migrator and Test sections; the public website will not need them.

You will also need to set up a reverse proxy for mydomain.com/app on the Azure side, using the same logic on Front Door or rewrite rules and path-based routing on application gateway

Hi @ricardo

Removing the "signalr" package and upgrading the "@microsoft/signalr" package to version "8.0.7" fixes the chat connection problem.

For the invisibility issue, replace the content of the showMessagesPanel function in the _ChatBar.js file with the following code.

showMessagesPanel: function () {
    $('#kt_drawer_chat_friends').addClass("d-none");
    $('#kt_drawer_chat_messenger').removeClass("d-none");
    $('#kt_quick_sidebar_back').removeClass('d-none');
},

Hi @WirelessDynamics

Can you share with us the logs that occur when you try to reach this page?

Hi @mnihal

  • Use Background Jobs (Hangfire or ABP Background Jobs) The simplest and most effective solution is to offload the event handler logic to background jobs so that it executes asynchronously without blocking the main thread.

Related Document Related Document

Example Code:

using Abp.BackgroundJobs;
using Abp.Dependency;
using Abp.Events.Bus.Handlers;

public class ShipmentReportEventHandler : EnterpriseBaseServiceBase, 
    IEventHandler<EntityCreatedEventData<Shipment>>, 
    IEventHandler<EntityUpdatedEventData<Shipment>>, 
    ITransientDependency
{
    private readonly IBackgroundJobManager _backgroundJobManager;

    public ShipmentReportEventHandler(IBackgroundJobManager backgroundJobManager)
    {
        _backgroundJobManager = backgroundJobManager;
    }

    public void HandleEvent(EntityCreatedEventData<Shipment> eventData)
    {
        // Enqueue the background job for creating the report
        _backgroundJobManager.Enqueue<CreateShipmentReportJob, ShipmentReportJobArgs>(
            new ShipmentReportJobArgs { ShipmentId = eventData.Entity.Id }
        );
    }

    public void HandleEvent(EntityUpdatedEventData<Shipment> eventData)
    {
        // Enqueue the background job for updating the report
        _backgroundJobManager.Enqueue<UpdateShipmentReportJob, ShipmentReportJobArgs>(
            new ShipmentReportJobArgs { ShipmentId = eventData.Entity.Id }
        );
    }
}
using Abp.BackgroundJobs;
using Abp.Dependency;

public class CreateShipmentReportJob : BackgroundJob<ShipmentReportJobArgs>, ITransientDependency
{
    private readonly IRepository<ShipmentReport> _shipmentReportRepository;

    public CreateShipmentReportJob(IRepository<ShipmentReport> shipmentReportRepository)
    {
        _shipmentReportRepository = shipmentReportRepository;
    }

    public override void Execute(ShipmentReportJobArgs args)
    {
        var shipmentReport = new ShipmentReport
        {
            ShipmentId = args.ShipmentId,
            // Map other properties as needed
        };
        _shipmentReportRepository.Insert(shipmentReport);
    }
}

public class UpdateShipmentReportJob : BackgroundJob<ShipmentReportJobArgs>, ITransientDependency
{
    private readonly IRepository<ShipmentReport> _shipmentReportRepository;

    public UpdateShipmentReportJob(IRepository<ShipmentReport> shipmentReportRepository)
    {
        _shipmentReportRepository = shipmentReportRepository;
    }

    public override void Execute(ShipmentReportJobArgs args)
    {
        var shipmentReport = _shipmentReportRepository.FirstOrDefault(s => s.ShipmentId == args.ShipmentId);
        if (shipmentReport != null)
        {
            // Update report logic here
            _shipmentReportRepository.Update(shipmentReport);
        }
    }
}

public class ShipmentReportJobArgs
{
    public int ShipmentId { get; set; }
}
  • You can configure your domain event handlers to execute asynchronously. Update your event handler methods to return Task and make them async:

Example Code:

public async Task HandleEventAsync(EntityCreatedEventData<Shipment> eventData)
{
    await Task.Run(() => CreateShipmentReportRecordFromShipment(eventData.Entity));
}

public async Task HandleEventAsync(EntityUpdatedEventData<Shipment> eventData)
{
    await Task.Run(() => UpdateShipmentReportRecordFromShipment(eventData.Entity));
}
  • If you want more scalability and control over background processing, implement a queue-based system such as RabbitMQ, Azure Service Bus, or Kafka.

Hi @4Matrix

Can you review the Key Vault error status in the Activity Logs Insights section? If there is no problem in the stage environment but a problem occurs in the production environment, you can check your private endpoints. Here you need to make sure that you have configured your virtual network correctly. Also, make sure that you have adjusted the configuration in the Entra Id section according to the production environment.

Hi @ricardo

Thanks for your feedback. We created an issue for this. You can follow the developments here. Have a nice working day

Hi @ricardo

We could not reproduce this situation in the relevant version and the latest version. In order to detect the problem, you can share your project with the e-mail address [email protected]. Or, you can debug the messages variable in the GetUserChatMessages method in the ChatAppService to see if messages belonging to the relevant person are coming here. As shown in the screenshot

Hi

Yes, it can also be used this way depending on the scenario.

Hi @mmukkara

Have you examined this document? It creates the same situation as you stated with the approach here. You can redirect to relevant domains according to the tenancy name.

Showing 1 to 10 of 227 entries