0

我正在实现一个基于 Windows 工作流基础的 Microsoft Speech Server 应用程序。该应用程序管理其他子应用程序 - 用户调用并且管理器加载包含正确应用程序的程序集并调用工作流。

我面临的问题是语音服务或 iis 喜欢将程序集锁定到内存中,防止我覆盖 dll。这使得调试应用程序很痛苦,但一旦应用程序部署到生产环境,这也是完全不可接受的。

无法手动卸载单个特定程序集 - 程序集仅在其父应用程序域卸载时才被卸载。

因此,我尝试使用 .net 远程创建一个新的应用程序域,将程序集加载到该域中,通过代理创建工作流对象,然后我想传递该代理。

这是我要创建的类型的代码。它在我要加载的程序集中:

public class typeContainer : MarshalByRefObject
{
    public static Type workflowType = typeof(mainWorkflow);
}

这是管理器中的代码:

AppDomain newDomain = AppDomain.CreateDomain("newdomain");
System.Runtime.Remoting.ObjectHandle oh = newDomain.CreateInstanceFrom(
                @"FullPathToAssembly",
                "namespace.typeContainer");
object unwrapped = oh.Unwrap();

所以问题是,我怎样才能在管理器中访问 typeContainer.workflowType ?oh.Unwrap() 产生一种 _TransparentProxy。

4

1 回答 1

0

简而言之,我在上面尝试做的事情是不可能的。简而言之,跨 AppDomains 发送 Type 会导致将程序集注入到当前域中。有关替代解决方案,请参阅这篇文章

于 2009-01-19T21:23:01.650 回答