0

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のタイプを生成します。

4

1 に答える 1

0

簡単に言えば、私が上でやろうとしていることは不可能です。つまり、AppDomain 間で Type を送信すると、アセンブリが現在のドメインに挿入されます。別の解決策については、この投稿を参照してください。

于 2009-01-19T21:23:01.650 に答える