I have already several .NET backgrounds apps on Windows Azure (aka Worker Roles) that are relying on AppDomain isolation and dynamic assembly loading. The main benefits are:
rebooting the app with new assemblies takes a few seconds (versus 5min for VM reboot).
teamwork is simplified as we can use the Azure Storage account to grant narrow access to the app only (instead of granting accesses to all Windows Azure services through the portal).
I am currently considering extending the process to Web Role for ASP.NET MVC webapp. Does anyone knows how to do this?
If you are already doing dynamic loading in a worker role then why the question for a web role. It is exactly the same.
Maybe you can elaborate a little on what you thing you are missing?
Related
I have a MVC3, ASP.NET 4.5 web application deployed on Azure Websites, using SQL Azure.
Currently I am using some "inproc" Session variables which I need to remove since I am going to start using multi website instances. I could just store the Session variable values in the SQL Azure DB, but I am also using TempData, which also uses Session state, "under the bonnet". Due to TempData use, I do need to implement an "out of proc" session solution.
I have seen some recommendation for using AppFabric caching, but I am unsure whether this is still current, and whether it is correct for Azure websites.
Also my development setup is on a Windows 7 machine with SQL Server 2008 R2. So a solution should be transferable with minimum pain.
There is also a "thread agility" issue with session variables, and a open source solution has been created using REDIS caching, but I have no experience of this, or REDIS. See: GitHub site
So thoughts I have are:
1) Angieslist/AL-redis custom provider, see: GITHUB link . Not entirely sure that this can be used in a Azure Websites application.
2) Appfabric. Not sure if this is relevant or current for Azure Websites.
3) SQL Azure session provider.
4) Azure Table storage.
5) Use a custome TempData provider to persist via cookies ie https://www.nuget.org/packages/BrockAllen.CookieTempData.dll/1.2.2, and then remove other session variables.
I would be very grateful for advice on a good Azure Websites session implementation mechanism which is simple. My data is pretty simple. I think I have one object which I quess I will need to serialize, probably via Json.NET
If you have more than one instance of an Azure Web Site, sticky sessions are enabled by default by the load balancer. This means that a user will be directed to the same instance (server) and that you'll be able to use session state in your app.
You may also find the Distributed Caching section (Ch 12) of this ebook helpful http://aka.ms/CloudApps_PDF
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?
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.
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/
In my mvc application adding one web role(same project with another web role) in service definition file, but am getting an error like "No Project Associated with(webrole name)".
My query is,
1) Is there any chance to run the one project with two web roles?
2) Presently my application is working one web role with one instance and VMsize="small".but my application running with low performance.
3)Is there any chance to increase the application performance by increasing the number of instance in the role?
Thanks,
PCSSCP.
The error "No Project Associated with ..." means that you have specified the existence of another web role, but there is no project in your solution (ASP.NET webproject, MVC project) that should be deployed as that webrole. Make soure you have two web projects in your solution, when using two web roles.
As an alternative you can deploy to web projects in a single web role.
Increasing the VM size gives your web role more resources (CPU speed, RAM, ...) to perform, which might increase the performance experience for visitors.
Using more instances won't make the application faster, but since all requests are shared amongst the instances, you can serve more users at the same time.
Is ASP.NET MVC intranet application intented only to be used as a Windows-domain based application or there's a possiblity to run it inside a workgroup?
Thanks!
The word Intranet has no correlation with any network operating system (Windows Domain, Workgroup, etc). How you build your web based application (using any language) is indifferent to who can access it. So to answer your direct question, you can use ASP.Net MVC to build a website that can be accessed by anyone on a local network if you configure the website and/or hosting environment (IIS) in that manner.
MVC (Model View Controler) is a way to develop application (web + desktop) and can be used as Windows-domain App or inside a workgorup or without of both
I have a .NET 4 application that runs as a windows service. It runs periodic tasks and provides WCF restful webservices. It already hosts a silverlight web page (via WCF) that allows a user to configure the service.
Now I have a requirement to provide information on HTML/java script pages (e.g. for browsers and platforms that don't support Silverlight). I can serve simple HTML and javascript pages through WCF but that becomes laborious very quickly. I'd like to use MVC2.
Is it possible to provide MVC2 web pages from within a windows service? Or at least use some of the functionality provided by MVC like routing and the view engine?
Or is it more trouble than it's worth and should I head down the path of a separate app hosted on IIS?
You can host the ASP.NET runtime in any type of application including a Windows Service using the CreateApplicationHost method. Although note that by doing this you lose the robustness, security, logging, etc... that a real web server such as IIS provides.
Since you're asking the question about what route to take, I'd host an MVC2 application in IIS. Why recreate a web server using WCF when IIS is already there - and since you're asking, it sounds like that's a viable option.
I agree with Darin's answer that you can host ASP.NET MVC2 in any application, but I think you're going to end up recreating a lot of plumbing that's already in place with IIS.
On the upside, if you go with serving up ASP.NET MVC2 resources in a WCF service application, it may end up rocking and you could have a nice application you can sell on the side. :)