Here I have to tried to explain how to publish to Azure, but for me that is not enough, so here is more.
First I have downloaded publish profile from azure:
Then in Visual Studio 2022 Build -> Publish -> Import profile I have loaded my profile.
Most probably would also work if simply with FTP upload web.config:
In order to write this article, I was using this web site.
First I started new ASP.NET Core Empty project with Target Framework 5.0:
Then using nuget I installed Microsoft.AspNetCore.SignalR.Common:
I have added new folder "Hubs", where I added new class ProgressHub which is inherited from Hub:
using System.Threading;
using Microsoft.AspNetCore.SignalR;
namespace SignalRProgressBar.Hubs
{
public class ProgressHub : Hub
{
public string msg = "Initializing and Preparing...";
public int count = 100;
public void CallLongOperation()
{
for (int x = 0; x <= count; x++)
{
// delay the process to see things clearly
Thread.Sleep(100);
if (x == 20)
msg = "Loading Application Settings...";
else if (x == 40)
msg = "Applying Application Settings...";
else if (x == 60)
msg = "Loading User Settings...";
else if (x == 80)
msg = "Applying User Settings...";
else if (x == 100)
msg = "Process Completed!...";
string myMessage = string.Format(msg + " {0}% of {1}%", x, count);
Clients.All.SendAsync("ReceiveMessage", myMessage);
}
}
}
}
In Startup.cs in the method ConfigureServices I added SignalR:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
Then I added wwwroot folder, and support for static files as I already explained here
After that I added index.html page in wwwroot folder, and I added Signalr JavaScript using client library:
As a search I wrote signalR and I have choosen aspnet-signalr:
I have added js library to html
Here I gave one example how my Startup.cs looks like, but with Asp.NET Core 3.0 Microsoft change it, you can read about it here
Here is my new Startup.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Radius
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
Here I gave one example of jQuery Ajax POST method, but problem with that example is that you don't know if returned JSON is wrong. Now I will give example when .NET side returns wrong JSON, and error handling in jQuery.
index.html remains same:
[HttpPost]
public ActionResult Get([FromBody] Filter filter)
{
string returnValue = string.Empty;
foreach (var city in filter.cities)
{
returnValue = $"{city}, {returnValue}";
}
return Ok(JsonSerializer.Serialize(returnValue));
}
Notice that in "$.ajax.done" I added try..catch block, and JSON.stringify because of dataType: "json" jQuery will automatically parse string into JSON.