Activities of "chrisalves"

[maliming] said: hi

You can run the abp install-libs command before publishing, or add this command to your publish pipeline.

Thanks.

Following up on the Libs issue, the screenshot below shows the related error:

The application works correctly in my Development environment because the abp install-libs command was executed when the solution was created.

For troubleshooting, I checked the published Blazor Server application on Azure App Service, and the wwwroot/libs folder does exist in the deployed files, as shown below:

Given that the folder is present after publishing, could you please advise what else might cause ABP to report that the Libs folder is missing in this environment (e.g., path resolution, static file configuration, deployment slot/file sync, or any ABP setting that affects the libs check)?

[maliming] said: hi

Issue 2: Disabling RabbitMQ for Single-Instance Deployment

Your application is tiered, so you need a distributed event bus. However, if you need to disable it, you can replace AbpEventBusRabbitMqModule with AbpEventBusModule in your module dependencies.

Thanks.

Hi Support Team,

Following up on the second issue (EventBus configuration).

Per your recommendation, we are temporarily switching from RabbitMQ to the default ABP EventBus (in-process) to move forward. However, our plan is to adopt the recommended best-practice setup in the near future, likely using RabbitMQ as the distributed event bus.

The attached image shows the current appsettings.json from our Blazor Server WebApp, which still includes RabbitMQ-related settings (for example, RabbitMQ:Connections:Default:HostName = "localhost").

Questions (short term – ABP EventBus)

  1. After switching to the default ABP EventBus, what exactly should we remove or change in the configuration files (appsettings.json and environment-specific settings) for:

    • Blazor Server WebApp
    • API/HttpApi.Host
    • AuthServer (if applicable)
  2. With the default ABP EventBus, does any server/service (AuthServer vs API) need to host the event bus, or is it purely in-process per application (meaning no endpoint/host configuration is required)?

Questions (near future – RabbitMQ best practice)

  1. When we move back to RabbitMQ, we’ll need to run it as an external/shared infrastructure component. Since our infrastructure is hosted on Azure, we would prefer an Azure-friendly option.
    • What hosting approach or managed service do you recommend for RabbitMQ in production (Azure-first if possible)?
    • If Azure isn’t ideal for managed RabbitMQ, are there external providers/services you commonly recommend based on your experience (ease of setup, reliability, maintenance)?

Thanks in advance for confirming the correct configuration changes now, and for advising on the best RabbitMQ hosting option for our upcoming production-ready setup.

Issue 3: ABP Library Installation and Azure Deployment

Context: The application is being published directly from Microsoft Visual Studio to an Azure App Service. The goal is to ensure that all necessary ABP libraries and client-side dependencies are correctly included in the remote server.

Core Question: What is the proper procedure to ensure all required libraries are bundled and sent to the remote server during the Visual Studio publish process?

References: https://abp.io/docs/9.2/get-started/pre-requirements

Environment Details

• ABP Framework Version: 9.2.1 • ABP Studio Version: 2.1.7 (Created with 0.9.25) • UI Framework: Blazor Server • Architecture: Tiered (Layered) • Database: SQL Server (EF Core) • Deployment: Azure App Service (Quality Environment) • Distributed Event Bus: RabbitMQ • Multi-Tenancy: Yes (Separate Tenant Schema) The application is built on ABP Framework version 9.2.1, originally created using ABP Studio version 0.9.25 and currently maintained under version 2.1.7. It utilizes a Tiered (Layered) architecture with a Blazor Server UI framework, authentication, api and webpublic servers. For data persistence, the system uses SQL Server managed via Entity Framework Core, featuring a Multi-Tenancy approach with Separate Tenant Schemas.

Description & Problem Statements

I am following the official ABP Deployment Documentation to deploy to Azure App Services, having each application “solution” its own Azure App Service. • AuthServer • HttpApiHost • BlazorServer • WebPublic

Issue 1: Azure Redis Cache Connection Failure

I am unable to establish a connection with Azure Redis Cache

  • Attempts made: I have configured the Redis Firewall to allow "all IP addresses" (0.0.0.0) for testing purposes, but the connection still fails.
  • Current Configuration: Previously, in local development, I used a simple IP address.
  • For Azure, I am attempting to use the full connection string provided by the Azure Portal

Question: Does the ABP Framework support passing the full Azure connection string directly into the standard Redis configuration field? Is there a specific format or property I should be using in the appsettings.json?

Issue 2: Disabling RabbitMQ for Single-Instance Deployment

The application is currently making constant connection attempts to RabbitMQ, leading to logs filled with connection errors. Since this is a Single-Instance deployment for a Quality environment, I do not require a distributed bus like RabbitMQ at this moment. • Requirements: I need a way to disable RabbitMQ or switch to a local/in-memory event bus following best practices. • Question 1: Is there any recommended configuration (via appsettings.json or modification of the HttpApiHostModule, AuthServerModule, and BlazorServerModule classes) to suppress RabbitMQ and use the internal memory bus? • Question 2: Is it expected behavior for the Blazor Server UI project to attempt direct connections to RabbitMQ in a tiered architecture?


Supporting Information

• References from articles taken into consideration: o https://abp.io/docs/9.2/deployment o https://abp.io/docs/9.2/get-started/pre-requirements

After you revisit the screenshots of the Mappers, you will see the ignore for the output. I believe this is the reason for this issue. If there is any complement on your suggestion above that handles correctly the output for the child please bring clearer than your previous response.

Hi!

I tried to use the suggested way but the Mapper is set to Ignore the output.Can you please revisit the screenshots of the Mapper to ensure there is a right link between your suggestion and the existing Mapper. Just to enforce the context, the Mapper was created using ABP Suite templates.

After trying to debug the issue, I found some possible cause:

a) The mapper created by ABP Suite is ignoring the child entities that I need to be returned. See the picture below:

b) Something is missing at the Repository created by default using ABP Suite.

  • Template: app
  • Created ABP Studio Version: 0.9.25
  • Current ABP Studio Version: 1.4.1
  • Tiered: Yes
  • Multi-Tenancy: Yes
  • UI Framework: blazor-server
  • Theme: leptonx
  • Theme Style: system
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: sqlserver
  • Separate Tenant Schema: Yes
  • Create Initial Migration: Yes
  • Run Db Migrator: Yes
  • Mobile Framework: maui
  • Public Website: Yes
  • Include Tests: Yes
  • Kubernetes Configuration: No
  • Distributed Event Bus: rabbitmq
  • Use Local References: No
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Exception message and full stack trace: Description:

Hello Abp.io Team,

I have encountered an issue with the GET endpoints generated by the ABP Suite for my entities containing child collections. My expectation is that when fetching an entity that has related child collections, these collections should be populated and returned in the response, as demonstrated in the auto-generated Swagger documentation.

Issue Details:

  • According to the Swagger example response for GET /product-items/{id} (see Figure 1), the returned object should include both the productItemCultures and productItemAttributeListValues collections alongside the main ProductItem entity.
  • However, when making an actual API request (see Figure 2) for a specific item (Cerveja Amstel Lager Puro Malte Lata 269ml), the response contains the ProductItem details, but both productItemCultures and productItemAttributeListValues arrays are empty, despite the related data existing.
  • As shown in Figure 3, these child data entries (attribute list values, for example) are indeed linked to the corresponding ProductItem in the database/UI, but they are not being returned by the API.

Images:

  • Image 1: Example return in Swagger documentation (expected structure with child collections returned).

  • Image 2: Actual API response (missing child collections, only main ProductItem information returned).

  • Image 3: UI/database evidence that ProductItem has attached Attribute List Values and Cultures.

Code Context (generated by ABP Suite, unmodified):

ProductItemsAppService.cs:

public virtual async Task<ProductItemDto> GetAsync(Guid id)
{
   return ObjectMapper.Map<ProductItem, ProductItemDto>(await _productItemRepository.GetAsync(id));
}

ProductItemDto.cs:

public abstract class ProductItemDtoBase : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
   public string? BusinessGroupId { get; set; }
   public string? BusinessGroupTitle { get; set; }
   public string? ProductTypeId { get; set; }
   public string? ProductId { get; set; }
   public string? globalProductItemId { get; set; }
   public string Title { get; set; } = null!;
   public string? Description { get; set; }
   public Guid? ImageId { get; set; }
   public Guid? QRCodeId { get; set; }
   public bool HasComponent { get; set; }
   public bool IsIndustrialized { get; set; }
   public bool IsService { get; set; }
   public bool IsRental { get; set; }
   public bool IsBundle { get; set; }
   public string? GTIN { get; set; }
   public string? RegionalId { get; set; }
   public string? SKU { get; set; }
   public string? IntegrationId { get; set; }
   public string? SEO { get; set; }
   public bool IsActive { get; set; }
   public string? Culture { get; set; }
   public Guid CategoryId { get; set; }

   public string ConcurrencyStamp { get; set; } = null!;

   public List<ProductItemCultureDto> ProductItemCultures { get; set; } = new();
   public List<ProductItemAttributeListValueDto> ProductItemAttributeListValues { get; set; } = new();
}

ProductItem.cs:

public abstract class ProductItemBase : FullAuditedAggregateRoot<Guid>, IMultiTenant
{
   public virtual Guid? TenantId { get; set; }

   [CanBeNull]
   public virtual string? BusinessGroupId { get; set; }

   [CanBeNull]
   public virtual string? BusinessGroupTitle { get; set; }

   [CanBeNull]
   public virtual string? ProductTypeId { get; set; }

   [CanBeNull]
   public virtual string? ProductId { get; set; }

   [CanBeNull]
   public virtual string? globalProductItemId { get; set; }

   [NotNull]
   public virtual string Title { get; set; }

   [CanBeNull]
   public virtual string? Description { get; set; }

   public virtual Guid? ImageId { get; set; }

   public virtual Guid? QRCodeId { get; set; }

   public virtual bool HasComponent { get; set; }

   public virtual bool IsIndustrialized { get; set; }

   public virtual bool IsService { get; set; }

   public virtual bool IsRental { get; set; }

   public virtual bool IsBundle { get; set; }

   [CanBeNull]
   public virtual string? GTIN { get; set; }

   [CanBeNull]
   public virtual string? RegionalId { get; set; }

   [CanBeNull]
   public virtual string? SKU { get; set; }

   [CanBeNull]
   public virtual string? IntegrationId { get; set; }

   [CanBeNull]
   public virtual string? SEO { get; set; }

   public virtual bool IsActive { get; set; }

   [CanBeNull]
   public virtual string? Culture { get; set; }
   public Guid CategoryId { get; set; }
   public ICollection<ProductItemCulture> ProductItemCultures { get; private set; }
   public ICollection<ProductItemAttributeListValues.ProductItemAttributeListValue> ProductItemAttributeListValues { get; private set; }
}

The repository method used here is the default from ABP:

await _productItemRepository.GetAsync(id)

I have not made any modifications to the generated service, DTO, or entity code.

Expectation vs. Reality:

  • Expected: The API response should return the associated child collections, matching the schema/example shown in the Swagger documentation (Image 1).
  • Actual: The API response omits these child collections (they are empty), even though they are associated and visible in the database and UI (Images 2 & 3).

Request:

Could you please advise why the child collections are not being included in the returned DTO, and what needs to be adjusted in the generated code or mapping for them to be populated as expected? Is there an additional configuration required, or is this a known issue with the generated code?

I can provide further information if needed, including full code or additional screenshots.

Thank you for your assistance!

Best regards,

Hi Engincan,

Thank you for your response.

Let’s keep this ticket open for a few more days while I review the point and run some test scenarios based on your suggestions.

Best regards,

Showing 1 to 10 of 66 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.3.0-preview. Updated on February 26, 2026, 13:35
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.