using System; using System.Reflection; using System.Runtime.Remoting; class MyClass { public void MethodA(DateTime dt) { Console.WriteLine("MethodA invoked at " + dt.ToLongTimeString()); } } class Starter { static void Main() { CreateLocal(); CreateRemote1(); CreateRemote2(); } static void CreateLocal() { object obj = Activator.CreateInstance(typeof(MyClass)); ((MyClass)obj).MethodA(DateTime.Now); } static void CreateRemote1() { ObjectHandle hObj = Activator.CreateInstance("library","MyClass"); object obj = hObj.Unwrap(); MethodInfo method = obj.GetType().GetMethod("MethodA"); method.Invoke(obj, new object[1] { DateTime.Now }); } static void CreateRemote2() { AppDomain domain = AppDomain.CurrentDomain; object obj = domain.CreateInstanceFromAndUnwrap("library.dll","MyClass"); MethodInfo method = obj.GetType().GetMethod("MethodA"); method.Invoke(obj, new object[1] { DateTime.Now }); } }
Author: coder
FriendlyName
using System; using System.Collections.Generic; using System.Text; class Program { static void Main(string[] args) { AppDomain currentDomain = AppDomain.CurrentDomain; Console.WriteLine(currentDomain.FriendlyName); AppDomain secondDomain = AppDomain.CreateDomain("New AppDomain"); secondDomain.CreateInstance("AssemblyA", "AppDomains.Demo", true,System.Reflection.BindingFlags.CreateInstance, null, new object[] { 7, 3 }, null, null, null); } }
SetPrincipalPolicy
using System; using System.Security; using System.Security.Principal; using System.Security.Permissions; class Program { static void Main(string[] args) { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); try { ShowMessage(); } catch (SecurityException exception) { Console.WriteLine(exception.Message); } } [PrincipalPermissionAttribute(SecurityAction.Demand,Role = "BUILTINUsers")] static void ShowMessage() { Console.WriteLine("The current principal is logged in locally "); Console.WriteLine("(they are a member of the local Users group)"); } }
Configure the AppDomainSetup
using System; class Test { public static void Main() { AppDomainSetup setupInfo = new AppDomainSetup(); setupInfo.ApplicationBase = @"C:MyRootDirectory"; setupInfo.ConfigurationFile = "MyApp.config"; setupInfo.PrivateBinPath = "bin;plugins;external"; AppDomain newDomain = AppDomain.CreateDomain("My New AppDomain", null, setupInfo); } }
SetData, GetData
using System; using System.Reflection; using System.Collections; class ListModifier{ public ListModifier() { ArrayList list = (ArrayList)AppDomain.CurrentDomain.GetData("Pets"); list.Add("turtle"); } } class MainClass{ public static void Main(){ AppDomain domain = AppDomain.CreateDomain("Test"); ArrayList list = new ArrayList(); list.Add("dog"); list.Add("cat"); list.Add("fish"); domain.SetData("Pets", list); domain.CreateInstance("MainClass","Apress.VisualCSharpRecipes.Chapter03.ListModifier"); foreach (string s in (ArrayList)domain.GetData("Pets")) { Console.WriteLine(s); } } }
AppDomain.CreateDomain
using System; class MainClass { public static void Main() { AppDomainSetup setupInfo = new AppDomainSetup(); setupInfo.ApplicationBase = @"C:MyRootDirectory"; setupInfo.ConfigurationFile = "MyApp.config"; setupInfo.PrivateBinPath = "bin;plugins;external"; AppDomain newDomain = AppDomain.CreateDomain("My New AppDomain", null, setupInfo); } }
ClientCertificates
using System; using System.Net; using System.Security.Cryptography.X509Certificates; class MainClass { public static void Main() { WebRequest requestA = WebRequest.Create("http://www.yoursite.com"); requestA.Credentials = new NetworkCredential("userName", "password"); requestA.PreAuthenticate = true; WebRequest requestB = WebRequest.Create("http://www.yoursite.com"); requestB.Credentials = CredentialCache.DefaultCredentials; requestB.PreAuthenticate = true; HttpWebRequest requestC = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com"); X509Certificate cert1 = X509Certificate.CreateFromCertFile("TestCertificate.cer"); requestC.ClientCertificates.Add(cert1); HttpWebRequest requestD = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com"); X509Store store = new X509Store(); X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName,"Joe", false); if (certs.Count == 1) { requestD.ClientCertificates.Add(certs[0]); } else { certs = X509Certificate2UI.SelectFromCollection( store.Certificates, "Select Certificate", "Select the certificate to use for authentication.", X509SelectionFlag.SingleSelection); if (certs.Count != 0) { requestD.ClientCertificates.Add(certs[0]); } } } }