WindowsWorkflowFoundation上に構築されたMicrosoftSpeechServerアプリケーションを実装しています。アプリは他のサブアプリを管理します。ユーザーが呼び出し、マネージャーが正しいアプリケーションを含むアセンブリを読み込み、ワークフローを呼び出します。
私が直面している問題は、スピーチサーブまたはiisがアセンブリをメモリにロックして、dllを上書きできないようにすることです。これにより、アプリのデバッグが面倒になりますが、アプリが本番環境にデプロイされると、まったく受け入れられなくなります。
単一の特定のアセンブリを手動でアンロードする方法はありません。アセンブリは、親アプリケーションドメインがアンロードされたときにのみアンロードされます。
そのため、.net Remotingを使用して新しいアプリケーションドメインを作成し、アセンブリをそのドメインにロードし、プロキシを介してワークフローオブジェクトを作成してから、そのプロキシを渡します。
これは、私が作成しようとしているタイプのコードです。それは私がロードしようとしているアセンブリにあります:
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のタイプを生成します。