Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to deploy and host .NET Core self-hosted console apps in Azure?

App 1: I have a React app (based on create-react-app) which I've added as a Web App in Azure - that was pretty straight-forward to setup. This is using the JS SignalR client to communicate with the server, mentioned next.

App 2: This app is the ASP.NET Core SignalR Server application created with dotnet new console. This app exposes a SignalR endpoint and is "self hosted".

App 3: A 2nd ASP.NET Core console app is setup as a SignalR client. This is responsible to fetching some data, and sends those data to the SignalR server. This takes the SignalR endpoint (url) as a commandline argument.

Running all this locally is pretty straightforward:

App 1: npm start / serve -s build

App 2: dotnet run -commandline args (runs on localhost taking a hubpath and port from the args supplied. The port is so that multiple instances SignalR servers can run on localhost - not sure if this is the way to do it in Azure or if they're differentiated with separate urls and hosted seperately there)

App 3: dotnet run "http://localhost:5000/somenotificationhubname"

I've added a bat file in each of the console apps, so I can open multiple instances of those, with different args.

So locally it runs as easily as clicking 3 bat files.

But I'm kinda lost on how to host all this in Azure. The web app seemed pretty straightforward. I just created a web app in Azure, connected to it through an FTP client and copied over the contents of the build folder from the React app.

But what to do with the ASP.NET Core console applications so that the SignalR console app will be hosted in Azure and has its endpoint exposed for the other 2 apps to consume?

I tried adding both both App 2 and 3 as webjobs under App 1, but that didn't seem to work.

I've also heard that SignalR should not be running on IIS, so would it make sense to make it self-contained (exe) and run it inside a docker container? Any help is much appreciated.

like image 416
Dac0d3r Avatar asked Jan 30 '18 07:01

Dac0d3r


1 Answers

I will suggest to change your app to use AppSettings file for configuration values instead of the commandline args.

  1. You can easily change the value of appsettings without redeploying or changing anything.

  2. You can have multiple appsettings file based on environments.

  3. Allows you to easily duplicate the app with same code but different appsettings for your multiple signalr server.

This will make it easier to deploy using the standard publishing wizard in Visual Studio or via command line.

like image 97
Satya Tanwar Avatar answered Oct 15 '22 18:10

Satya Tanwar