Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Good example of use of AppDomain

Tags:

.net

appdomain

I keep getting asked about AppDomains in interviews, and I know the basics:

  • they are an isolation level within an application (making them different from applications)
  • they can have threads (making them different from threads)
  • exceptions in one appdomain do not affect another
  • appdomains cannot access each other's memory
  • each appdomain can have different security

I still don't get what makes them necessary. I'm looking for a reasonable concrete circumstance when you would use one.

Answers:

  • Untrusted code
    • Core application protected
      Untrusted/3rd party plugins are barred from corrupting shared memory and non-authorized access to registry or hard drive by isolation in separate appdomain with security restrictions, protecting the application or server. e.g. ASP.NET and SQL Server hosting component code
  • Trusted code
    • Stability
      Application segmented into safe, independent features/functionality
    • Architectural flexibility
      Freedom to run multiple applications within a single CLR instance or each program in its own.

Anything else?

like image 778
hughdbrown Avatar asked Sep 18 '08 21:09

hughdbrown


People also ask

What is AppDomain used for?

The AppDomain class implements a set of events that enable applications to respond when an assembly is loaded, when an application domain will be unloaded, or when an unhandled exception is thrown.

How does an AppDomain get created?

AppDomains are created by the . Net runtime when a managed application is initialised. When you start ABC. EXE, it gets an application domain.

What is application domain in asp net with example?

Application domains provide a unit of isolation for the common language runtime. They are created and run inside a process. Application domains are usually created by a runtime host, which is an application responsible for loading the runtime into a process and executing user code within an application domain.


2 Answers

Probably the most common one is to load assemblies that contain plug-in code from untrusted parties. The code runs in its own AppDomain, isolating the application.

Also, it's not possible to unload a particular assembly, but you can unload AppDomains.

For the full rundown, Chris Brumme had a massive blog entry on this:

http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx

https://devblogs.microsoft.com/cbrumme/appdomains-application-domains/

like image 192
Michael Burr Avatar answered Sep 28 '22 18:09

Michael Burr


Another benefit of AppDomains (as you mentioned in your question) is code that you load into it can run with different security permissions. For example, I wrote an app that dynamically loaded DLLs. I was an instructor and these were student DLLs I was loading. I didn't want some disgruntled student to wipe out my hard drive or corrupt my registry, so I loaded the code from their DLLs into a separate AppDomain that didn't have file IO permissions or registry editing permissions or even permissions to display new windows (it actually only had execute permissions).

like image 31
Jon Turner Avatar answered Sep 28 '22 18:09

Jon Turner