I have integrated the singalr in administration microservice.
private hubConnection: signalR.HubConnection
public startConnection = () => {
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl('https://localhost:44367/signalr-hubs/change-detection')
.build();
console.log(this.hubConnection, 'hub connection');
this.hubConnection
.start()
.then(() => console.log('Connection started'))
.catch(err => console.log('Error while starting connection: ' + err));
this.hubConnection.on('BroadcastMessage', (data) => {
console.log(data);
});
}
constructor(){
this.startConnection();
}
I have put the above code in the appcomponent.ts file. The above code is working fine and when I send the signal from the administration microservice, I receive the message on "BroadcastMessage". I have used the administration service URL "https://localhost:44367".
Now I don't want to use the administration service URL, I want to use the gateway URL https://localhost:44325 so I configured the ocelot.json file as below.
{
"ServiceKey": "Administration Service",
"DownstreamPathTemplate": "/signalr-hubs/{everything}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 44367
}
],
"UpstreamPathTemplate": "/signalr-hubs/{everything}",
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ]
},
{
"DownstreamPathTemplate": "/ws",
"UpstreamPathTemplate": "/",
"DownstreamScheme": "ws",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 44367
}
]
}
When I use the above code, I am getting the below error in console.
[2023-01-17T11:47:29.510Z] Information: WebSocket connected to wss://localhost:44325/signalr-hubs/change-detection?id=Oiwz6joKZs_dxyeYKdUsHg.
Utils.js:141 [2023-01-17T11:47:29.513Z] Error: Connection disconnected with error 'Error: Server returned handshake error: Handshake was canceled.'.
log @ Utils.js:141
_stopConnection @ HttpConnection.js:396
transport.onclose @ HttpConnection.js:334
_close @ WebSocketTransport.js:144
webSocket.onmessage @ WebSocketTransport.js:84
wrapFn @ zone.js:766
invokeTask @ zone.js:406
onInvokeTask @ core.mjs:26218
invokeTask @ zone.js:405
runTask @ zone.js:178
invokeTask @ zone.js:487
invokeTask @ zone.js:1661
globalCallback @ zone.js:1692
globalZoneAwareCallback @ zone.js:1725
Show 14 more frames
app.component.ts:22 Error while starting connection: Error: Server returned handshake error: Handshake was canceled.
If I integrated the singalr into the web gateway then I am getting the ocelot configuration not found error.
This is the administration service log
[administration-service_786370b9-c]: [17:17:09 INF] Request starting HTTP/1.1 POST https://localhost:44367/signalr-hubs/change-detection/negotiate?negotiateVersion=1 - 0
[administration-service_786370b9-c]: [17:17:09 INF] CORS policy execution successful.
[administration-service_786370b9-c]: [17:17:09 INF] Executing endpoint '/signalr-hubs/change-detection/negotiate'
[administration-service_786370b9-c]: [17:17:09 INF] Executed endpoint '/signalr-hubs/change-detection/negotiate'
[administration-service_786370b9-c]: [17:17:09 INF] Request finished HTTP/1.1 POST https://localhost:44367/signalr-hubs/change-detection/negotiate?negotiateVersion=1 - 0 - 200 316 application/json 1.8707ms
[administration-service_786370b9-c]: [17:17:09 INF] Request starting HTTP/1.1 GET https://localhost:44367/signalr-hubs/change-detection?id=Oiwz6joKZs_dxyeYKdUsHg - 0
[administration-service_786370b9-c]: [17:17:09 INF] CORS policy execution successful.
[administration-service_786370b9-c]: [17:17:09 INF] Executing endpoint '/signalr-hubs/change-detection'
[administration-service_786370b9-c]: [17:17:29 INF] Executed endpoint '/signalr-hubs/change-detection'
[administration-service_786370b9-c]: [17:17:29 INF] Request finished HTTP/1.1 GET https://localhost:44367/signalr-hubs/change-detection?id=Oiwz6joKZs_dxyeYKdUsHg - 0 - 101 - - 20029.8655ms
This is the web gateway log:
[web-gateway_8b434f23-f]: [17:17:29 DBG] requestId: 0HMNOG1S5794U:00000002, previousRequestId: no previous request id, message: ocelot pipeline finished
[web-gateway_8b434f23-f]: [17:17:29 INF] Request finished HTTP/1.1 GET https://localhost:44325/signalr-hubs/change-detection?id=Oiwz6joKZs_dxyeYKdUsHg - - - 101 42 - 20035.4048ms
I am getting below error when build the project from Azure pipeline.
error NU1101: Unable to find package Volo.Abp.Account.Pro.Public.Web.OpenIddict. No packages exist with this id in source(s): ABP Commercial NuGet Source, nuget.org [/src/ChurchPharmacy.sln]
error NU1101: Unable to find package Volo.Abp.Account.Pro.Public.HttpApi. No packages exist with this id in source(s): ABP Commercial NuGet Source, nuget.org [/src/ChurchPharmacy.sln]
error NU1101: Unable to find package Volo.Abp.Account.Pro.Public.Application. No packages exist with this id in source(s): ABP Commercial NuGet Source, nuget.org [/src/ChurchPharmacy.sln]
error NU1101: Unable to find package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX. No packages exist with this id in source(s): ABP Commercial NuGet Source, nuget.org [/src/ChurchPharmacy.sln]
Failed to restore /src/apps/auth-server/src/ChurchPharmacy.AuthServer/ChurchPharmacy.AuthServer.csproj (in 27.05 sec).
I want to integrate the concurrent login feature. I downloaded the sample code from GitHub. I have a microservice template. What is the best practice to integrate the concurrent login feature, with Auth Server or Identity service or any other way?
I have microservice architecture. I have configured the blog provider in the administration microservice. I have a multi-tenancy configuration as well. I want to use different azure connection strings based on tenant configuration. I want to give the setting for the blob storage provider and the tenant can change the setting. I also want to give choices to tenants either they can use azure storage or aws storage. So basically I want blob configuration based on the settings of the tenant.
I have microservice architecture and I want to integrate concurrent modules as a plugin.
I have downloaded the sample concurrent login module and built the project and put the dls in a folder.
I have registered this module as a plugin in the web gateway configuration.
context.Services.AddApplication<ChurchPharmacyWebGatewayModule>(options =>
{
options.PlugInSources.AddFolder(@"D:\abp\abp6\ChurchPharmacy\plugins", System.IO.SearchOption.AllDirectories);
});
When I run the project I am getting the below error in the web gateway.
I read the documentation on background jobs and worker processes but I have a requirement to schedule the task to run on a specific date and time. I don't want to use the worker process which will run on every seconds or minutes to check the schedular and execute the task.
Suppose, I have a task to change the product price at midnight or a specific date and time so I can schedule the new product price and that job should trigger exact the date and time and change the product price.
I have microservice architecture and I followed the multi-tenancy domain resolver document but it's not working in a microservice architecture. Can you please provide some documentation to integrate multi-tenancy domain resolver in a microservice architecture? I have following question.
Configure<AbpTenantResolveOptions>(options =>
{
options.AddDomainTenantResolver("{0}.api.getabp.net:44367");
});
{
"ServiceKey": "Account Service",
"DownstreamPathTemplate": "/api/account/{everything}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "{0}.api.getabp.net", // host name change here
"Port": 44322
}
],
"UpstreamPathTemplate": "/api/account/{everything}",
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ]
}
`
How do I get all logged in users? I want to display the name of all logged in users on the page. If users logged out and or new users logged in the list should refresh. I will use the SignalR but I want the events where I can get the logged in or logged out event of users.
I am following https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement document to replace the route's component and create custom routes as per our requirements. But as per the documents, the html is binding only two routes of the administration menu. I want to bind the custom routes as per the route providers that I have configured and the route providers of administration and SaaS menu based on permission.
I am also getting the following error in routes.component.html.
Also, I noticed that the administration menu is not expanding and CSS is not proper.
I want the custom routes the same as the in-built route's component so I can customize a little bit on component html.
I have microservice architecture and I have integrated the NgxsRouterPluginModule in Angular project and injected into app.module.ts. To reproduce the issue, you can follow below changes.
Install the NgxsRouterPluginModule
"@ngxs/router-plugin": "^3.7.4",
Change the environment configuration to use the account module login UI.
const oAuthConfig = { issuer: 'https://localhost:44322', clientId: 'App_Angular', scope: 'offline_access openid profile email phone', requireHttps: true, };
Inject the NgxsRouterPluginModule in app.module.ts
..... NgxsRouterPluginModule.forRoot(), NgxsLoggerPluginModule.forRoot(), NgxsReduxDevtoolsPluginModule.forRoot(), ],
With the above configuration, the login page won't work and you will get the below error in the console.
vendor.js:69956 ERROR TypeError: Cannot read properties of undefined (reading 'isEnabled') at get isEnabled [as isEnabled] (node_modules_volo_abp_ng_account_fesm2015_volo-abp_ng_account-public_mjs.js:5560:30) at vendor.js:9296:14 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35) at vendor.js:9299:13 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35) at vendor.js:9299:13 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35)
vendor.js:69956 ERROR TypeError: Cannot read properties of undefined (reading 'isEnabled') at get isEnabled [as isEnabled] (node_modules_volo_abp_ng_account_fesm2015_volo-abp_ng_account-public_mjs.js:5560:30) at vendor.js:9296:14 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35) at vendor.js:9299:13 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35) at vendor.js:9299:13 at Array.forEach (<anonymous>) at deepFreeze (vendor.js:9289:35)