In my pod shell there is only one appsettings.json as far as I can see:
root@myapplication-blazor-574bcb6484-7rsrx:/# find ./ -name appsettings.json
./app/wwwroot/appsettings.json
I also tried to create a new solution using 9.2.2 using ABP CLI. Following app settings.json is found.
$ find ./ -name appsettings.json
./gateways/web/MyApplication.WebGateway/appsettings.json
./gateways/public/MyApplication.PublicGateway/appsettings.json
./gateways/mobile/MyApplication.MobileGateway/appsettings.json
./apps/auth-server/MyApplication.AuthServer/appsettings.json
./apps/public/MyApplication.Web.Public/appsettings.json
./apps/blazor/MyApplication.Blazor.Client/wwwroot/appsettings.json
./services/identity/MyApplication.IdentityService/appsettings.json
./services/chat/MyApplication.ChatService/appsettings.json
./services/file-management/MyApplication.FileManagementService/appsettings.json
./services/language/MyApplication.LanguageService/appsettings.json
./services/gdpr/MyApplication.GdprService/appsettings.json
./services/administration/MyApplication.AdministrationService/appsettings.json
./services/saas/MyApplication.SaasService/appsettings.json
./services/audit-logging/MyApplication.AuditLoggingService/appsettings.json
./services/customer/MyApplication.CustomerService/appsettings.json
Any more ideas? Thanks :-)
Thanks,
<cb6484-7rsrx:/app# cat wwwroot/appsettings.json
{
"App": {
"SelfUrl": "https://staging.mydomain.io"
},
"AuthServer": {
"Authority": "https://auth.staging.mydomain.io",
"ClientId": "Blazor",
"ResponseType": "code"
},
"RemoteServices": {
"Default": {
"BaseUrl": "https://gateway-web.staging.mydomain.io"
}
},
"AbpCli": {
"Bundle": {
"Mode": "BundleAndMinify", /* Options: None, Bundle, BundleAndMinify */
"Name": "global"
}
}
root@geoticket-blazor-574bcb6484-7rsrx:/app#
I have checked, but no http:/ links .
Yes, I am using Nginx reverse proxy. Can you show me a working example here? Thanks :-)
Thanks mailing, that was the problem! You need to copy the contracts into the blazor project.
Thanks AI,
I tried your suggestion but it did not worked, I think that @using Volo.Abp.AspNetCore.Components.Authorization is not valid.
Please let the humans take a look at it :-)
Thanks, I will take a look :-)
For some reason it seems to only be related to Safari web browser, and not Chrome. Any ideas why?
Thanks
Hi :-)
I have tried to follow https://abp.io/docs/latest/framework/infrastructure/event-bus/distributed
The CustomerService shall publish a message over RabbitMQ disitrbuted bus to the InvoiceService when Customer is updated.
The publisher:
public class CustomersAppService : ApplicationService, ICustomersAppService
{
protected IDistributedCache<CustomerDownloadTokenCacheItem, string> _downloadTokenCache;
protected ICustomerRepository _customerRepository;
protected CustomerManager _customerManager;
protected IDistributedEventBus _eventBus;
public CustomersAppService(
ICustomerRepository customerRepository,
CustomerManager customerManager,
IDistributedEventBus eventBus,
IDistributedCache<CustomerDownloadTokenCacheItem, string> downloadTokenCache)
{
_downloadTokenCache = downloadTokenCache;
_customerRepository = customerRepository;
_customerManager = customerManager;
_eventBus = eventBus;
}
public virtual async Task<CustomerDto> UpdateAsync(Guid id, CustomerUpdateDto input)
{
var customer = await _customerManager.UpdateAsync(
id,
input.Name, input.Street, input.ZipCode, input.City, input.PhoneNumber,
input.Email, input.IsCompany, input.IdentificationNumber, input.AttName,
input.ConcurrencyStamp
);
// Send update event
var customerUpdatedEto = ObjectMapper.Map<Customer, CustomerUpdatedEto>(customer);
await _eventBus.PublishAsync(customerUpdatedEto);
// Return object
return ObjectMapper.Map<Customer, CustomerDto>(customer);
}
...
}
The ETO class:
using Volo.Abp.EventBus;
namespace MyProject.CustomerService.Customers;
[EventName("MyProject.CustomerService.Customers.CustomerUpdated")]
public class CustomerUpdatedEto
{
public Guid Id { get; set; }
public string Name { get; set; } = null!;
public string Street { get; set; } = null!;
public string ZipCode { get; set; } = null!;
public string City { get; set; } = null!;
public string PhoneNumber { get; set; } = null!;
public string Email { get; set; }
public bool IsCompany { get; set; }
public string? IdentificationNumber { get; set; }
public string? AttName { get; set; }
}
That's everything I have done in the CustomerService. In the subscriber, InvoiceService is only one added class CustomerServiceEventHandler
using MyProject.CustomerService.Customers;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace MyProject.InvoiceService;
public class CustomerServiceEventHandler : IDistributedEventHandler<CustomerUpdatedEto>, ITransientDependency
{
public async Task HandleEventAsync(CustomerUpdatedEto eventData)
{
var customerId = eventData.Id;
}
}
Now, I have started the both services, CustomerService and the InvoiceService, and the RabbitMQ queues are listed by using the RabbitMQ CLI:
$ docker exec -it rabbitmq rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name messages
AbpBackgroundJobsDelayed.Volo.Abp.Emailing.BackgroundEmailSendingJobArgs 0
MyProject_AuthServer 0
MyProject_IdentityService 0
MyProject_CustomerService 0
AbpBackgroundJobs.Volo.Abp.Emailing.BackgroundEmailSendingJobArgs 0
MyProject_InvoiceService 0
So the queues seems to be registered. However, I can't see that any message is published, nor received at the subscribe. Notice that the receiver has a binding to the ETO class MyProject.CustomerService.Customers.CustomerUpdated. When using debugger in CustomerService, I can see that there is no exceptions thrown in the await _eventBus.PublishAsync(customerUpdatedEto); line.
$ docker exec -it rabbitmq rabbitmqctl list_bindings | grep MyProject_CustomerService
exchange MyProject_CustomerService queue MyProject_CustomerService []
MyProject exchange MyProject_CustomerService queue Volo.Abp.Localization.LanguageChangedEto []
MyProject exchange MyProject_CustomerService queue Volo.Payment.RecurringPaymentUpdated []
MyProject exchange MyProject_CustomerService queue Volo.Payment.SubscriptionCanceled []
MyProject exchange MyProject_CustomerService queue Volo.Payment.SubscriptionCreated []
MyProject exchange MyProject_CustomerService queue abp.data.apply_database_migrations []
MyProject exchange MyProject_CustomerService queue abp.multi_tenancy.tenant.connection_string.updated []
MyProject exchange MyProject_CustomerService queue abp.multi_tenancy.tenant.created []
$ docker exec -it rabbitmq rabbitmqctl list_bindings | grep MyProject_InvoiceService
exchange MyProject_InvoiceService queue MyProject_InvoiceService []
MyProject exchange MyProject_InvoiceService queue MyProject.CustomerService.Customers.CustomerUpdated []
MyProject exchange MyProject_InvoiceService queue Volo.Abp.Localization.LanguageChangedEto []
MyProject exchange MyProject_InvoiceService queue Volo.Payment.RecurringPaymentUpdated []
MyProject exchange MyProject_InvoiceService queue Volo.Payment.SubscriptionCanceled []
MyProject exchange MyProject_InvoiceService queue Volo.Payment.SubscriptionCreated []
MyProject exchange MyProject_InvoiceService queue abp.data.apply_database_migrations []
MyProject exchange MyProject_InvoiceService queue abp.multi_tenancy.tenant.connection_string.updated []
MyProject exchange MyProject_InvoiceService queue abp.multi_tenancy.tenant.created []
Thanks, it is working fine now! :-)
Hi, I added your suggestions in the project file. However, the generate embedded files manifest setting
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
result with this in the Developer console in web browser:
[Error] Error: One or more errors occurred. (An error occurred during the initialize Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor phase of the module Volo.Abp.AspNetCore.Components.WebAssembly.AbpAspNetCoreComponentsWebAssemblyModule, Volo.Abp.AspNetCore.Components.WebAssembly, Version=9.0.4.0, Culture=neutral, PublicKeyToken=null: The API description of the Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService.GetAsync method was not found!. See the inner exception for details.)
(anonym funktion) (blazor.web.js:1:157835)
When setting to false / remove it, then it is the same result as before. Any other ideas?
Thanks
Thanks,
I can understand why you don't recommend to use Language Module for static content. However, we was first trying to follow the localization guide at https://abp.io/docs/latest/framework/fundamentals/localization but failed.
So perhaps you can guide us to set the localization instead of using the language module?
This is what we have done:
ProjectBlazorClientModule.cs:
[DependsOn(
typeof(AbpLocalizationModule),
...
typeof(AbpVirtualFileSystemModule) //virtual file system
)]
public class ProjectBlazorClientModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>();
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>()
// Include the generated app-generate-proxy.json in the virtual file system
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<ProjectBlazorClientModule>();
});
ConfigureLocalization();
...
}
private void ConfigureLocalization()
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<ProjectBlazorClientModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
//Define a new localization resource (TestResource)
options.Resources
.Add<TestResource>("en")
.AddVirtualJson("/Localization/Resources/Test");
options.DefaultResourceType = typeof(TestResource);
});
}
}
TestResource.cs
using Volo.Abp.Localization;
namespace GeoTicket.Blazor.Client.Localization.Resources;
[LocalizationResourceName("Test")]
public class TestResource;
File structure:
Project.Blazor.Client/
├── Project.Blazor.Client.csproj
├── ProjectBlazorClientModule.cs
├── .....
├── ProjectComponentBase.cs
├── Localization
│ ├── Resources
│ │ └── Test
│ │ ├── en.json
│ │ └── sv.json
│ └── TestResource.cs
.....
en.json content (similar for sv.json):
{
"culture": "en",
"texts": {
"HelloWorld": "Hello World!"
}
}
@page "/"
@using Project.Blazor.Client.Localization.Resources
@using Microsoft.Extensions.Localization
@inherits ProjectComponentBase
@inject IStringLocalizer<TestResource> W
@W["HelloWorld"]
The @W["HelloWorld"] is not working, just HelloWorld in the page above.
I think that we have followed the guide, but still doesn't get it. Any ideas?