appdomain概念与应用
2017-10-29 09:53 Dirichlet 阅读(307) 评论(0) 收藏 举报用appcmd命令显示w3wp.exe进程,很多时候一个应用程序池负责创建一个w3wp.exe进程与之对应,可能还有时候是创建多个w3wp.exe,有待验证。
c:\Windows\System32\inetsrv>appcmd list wp WP "7524" (applicationPool:ASP.NET v4.0) WP "10600" (applicationPool:website test1)
实验目的:对于一个固定的应用程序池,有多个应用程序都绑定到它上面,
实验步骤:步骤Default Web Site下面创建三个应用程序,他们都指定这个应用程序池,那么怎么理解应用程序这个概念?
应用程序对应.net里的应用程序域appdomain,可以把当前的进程,当前进程所有的应用程序域都打印出来。
Process.GetCurrentProcess().ProcessName=w3wp ||DefaultDomain|| ||/LM/W3SVC/1/ROOT/WebApplication3-1-131496832889509069|| ||/LM/W3SVC/1/ROOT/WebApplication2-2-131496833064771698|| ||/LM/W3SVC/1/ROOT/WebApplication1-3-131496833182925146||
这三个IIS应用程序域都在相同的进程w3wp内,他们对应进程内的三个应用程序域WebApplication1,WebApplication2,WebApplication3
打印应用程序域的示例代码:
public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { Response.Write($"Process.GetCurrentProcess().ProcessName={Process.GetCurrentProcess().ProcessName}\r\n"); Response.Write(GetAllAppDomains()); } public static string GetAllAppDomains() { //AppDomain one = AppDomain.CreateDomain("One"); //AppDomain two = AppDomain.CreateDomain("Two"); // Creates 2 app domains List<AppDomain> appDomains = new List<AppDomain>(); IntPtr enumHandle = IntPtr.Zero; var host = new CorRuntimeHostClass(); StringWriter writer = new StringWriter(); try { host.EnumDomains(out enumHandle); object domain = null; AppDomain tempDomain; while (true) { host.NextDomain(enumHandle, out domain); if (domain == null) { break; } tempDomain = domain as AppDomain; appDomains.Add(tempDomain); } } catch (Exception ex) { writer.WriteLine(ex.ToString()); } finally { host.CloseEnum(enumHandle); int rel = Marshal.ReleaseComObject(host); } Assembly[] assemblies; foreach (AppDomain app in appDomains) { writer.WriteLine(); writer.WriteLine($"||{app.FriendlyName}||"); //assemblies = app.GetAssemblies(); //writer.WriteLine("-----------------------Assemblies------------------"); //foreach (Assembly assem in assemblies) //{ //writer.WriteLine(assem.FullName); //} //writer.WriteLine("---------------------------------------------------"); //writer.WriteLine(); } return writer.ToString(); } }
参考:
http://www.cnblogs.com/foman/archive/2009/10/18/1585655.html
http://blog.csdn.net/minsenwu/article/details/38391621
http://www.cnblogs.com/HopeGi/p/6422357.html
http://www.cnblogs.com/awpatp/archive/2009/11/24/1609570.html