さまざまな dll ファイルから外部アセンブリをロードするアプリケーションがあります。以前に作成した別のドメインにアセンブリをロードしています。すべてのアセンブリは XElement オブジェクトを返します。このオブジェクトをメイン AppDomain の別のメソッドに使用する必要がありますが、XElement オブジェクトには Serializable 属性がないため、このオブジェクトをそのまま送信できません。外部ライブラリから XElement オブジェクトを取得することは非常に重要です。これにシリアル化を使用しようとしましたが、毎回失敗します。
ラップクラスを作成してみました。このクラスは XElement からストリームを作成するだけで、メイン ドメインでこのストリームから読み込もうとしていますが、このストリームはその時点で閉じられています。
誰かがこの問題を解決するのを手伝ってくれたら、とてもうれしいです。ありがとうございます。
private XElement CallModule(string modulePath, string moduleName,
Dictionary<string, string> parameters)
{
AppDomainSetup moduleDomainSetup = new AppDomainSetup();
moduleDomainSetup.ApplicationBase = AppDomain.CurrentDomain.RelativeSearchPath;
AppDomain moduleDomain =
AppDomain.CreateDomain("moduleDomain", null, moduleDomainSetup);
try
{
Module remoteobj = (Module)moduleDomain.CreateInstanceFromAndUnwrap(
HttpContext.Current.Request.MapPath(modulePath),
moduleName + "." + moduleName);
Module.WrappedStream remoteResult =
remoteobj.Execute(queryString["command"], parameters);
XElement res = XElement.Load(remoteResult.Stream);
return res;
}
catch (Exception ex)
{
throw ex;
}
finally
{
AppDomain.Unload(moduleDomain);
}
}