3
我想以獨立方式運行來自不同.dll的多個服務。基本上,所有的服務都來自RoleEntryPoint
,我想分別加載一個0123',並在不同的線程中運行它。從其他.dll加載服務並將它們隔離運行
到目前爲止,我可以找到服務,並得到其類型:
String pathToDll = @"C:\....\bin\Debug\ChildWorkerRole.dll";
Assembly assembly = Assembly.LoadFrom(pathToDll);
Type serviceType = assembly.GetTypes().SingleOrDefault(t => t.BaseType == typeof(RoleEntryPoint));
而且也是在當前AppDomain
和Thread
運行它:
RoleEntryPoint myRole2 = (RoleEntryPoint)Activator.CreateInstance(serviceType);
if (myRole2.OnStart())
myRole2.Run();
但是,當我嘗試在運行它一個單獨的不同AppDomain我得到一個例外:
AppDomain domain = AppDomain.CreateDomain("MyNewDomain");
RoleEntryPoint myRole = (RoleEntryPoint)domain.CreateInstanceFromAndUnwrap(pathToDll, serviceType.FullName);
if (myRole.OnStart())
myRole.Run();
這個ex ception:
System.Runtime.Serialization.SerializationException was unhandled
Message=Type 'ChildWorkerRole.WorkerRole' in assembly 'ChildWorkerRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
Source=mscorlib
StackTrace:
at System.AppDomain.CreateInstanceFromAndUnwrap(String assemblyName, String typeName)
.......
有趣的是ChildWorkerRole
實際上是標有SerializableAttribute
...但可能是因爲RoleEntryPoint
則不然,它不能做。
任何想法或解決方法?
謝謝!
我明白了。謝謝! :) – vtortola 2011-03-21 16:48:49