Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying an ASP.NET MVC in production, while users are still online

I need to know the best practices for deploying a new version of an ASP.NET MVC application while users are still connected to it

Everytime one deploys the .dll that contains the models and controllers of the application, the application is rebooted. Also deploying the web.config (that references eventually new libraries) results in rebooting the application.

So, the question is: how do I update the application's dll or web.config without disconnecting the users from the site?

like image 546
sports Avatar asked Dec 17 '13 23:12

sports


People also ask

Is ASP.NET MVC still in use?

It is no longer in active development. It is open-source software, apart from the ASP.NET Web Forms component, which is proprietary. ASP.NET Core has since been released, which unified ASP.NET, ASP.NET MVC, ASP.NET Web API, and ASP.NET Web Pages (a platform using only Razor pages).

How do I publish a Visual Studio project locally?

Right-click on the project (not the solution) in Solution Explorer and select Publish. In the Publish tab, select Publish. Visual Studio writes the files that comprise your application to the local file system. The Publish tab now shows a single profile, FolderProfile.


2 Answers

You want to use another session state option other than using in-proc so your users survive when the process recycles or system reboots.

InProc: In-Proc mode stores values in the memory of the ASP.NET worker process. Thus, this mode offers the fastest access to these values. However, when the ASP.NET worker process recycles, the state data is lost.

See ASP.NET Session State Options for more ASP.NET options and mentions of other third party session state providers.

This question also deals with possible deployment scenarios to help with the websites under load and slow app times after a pool recycle: How are people solving app pool recycle issues on deployment with large apps?

Ideally you want to be as stateless as you can, and stay away from session. Perhaps you can use a cookie for tracking the current user via forms auth for example. But you must stay away from in-proc by using distributed cache/session provider so users won't lose session state on app pool recycles.

like image 178
Luke Hutton Avatar answered Oct 15 '22 08:10

Luke Hutton


I think the best is to deploy a new site for new sessions, and mantain existing sessions in the old one.

I feel that "The blue green deployment strategy" article linked below can be hacked with a few changes to do that (Disallow New Connections instead of issue a "drain", using sticky sessions).

https://kevinareed.com/2015/11/07/how-to-deploy-anything-in-iis-with-zero-downtime-on-a-single-server/

like image 33
Cesc Avatar answered Oct 15 '22 07:10

Cesc