多数の AppDomain 間で適度に大量のメッセージを送信する必要があるアプリケーションがあります。リモート処理を使用してこれを実装できることはわかっていますが、クロスドメイン デリゲートがあることにも気付きました。誰もこの種の問題を見たことがありますか?
6 に答える
名前付きパイプバインディングでWCFを使用して成功しました。名前付きパイプを使用すると、ネットワークトラフィックが作成されず、バイナリエンコーディングが使用されるため、将来のスケーリングシナリオで分散する機能を犠牲にすることなく、かなり高速になります。
編集:実装例へのリンクを含む詳細情報については、ここを参照してください。
クロスドメイン デリゲートでは、パラメーターが 0 の void メソッドのみが許可されます。あるアプリドメインから別のアプリドメインへの通知目的の単純なコールバックとしては、ほとんど役に立ちません。たとえば、InitComplete() などのメソッドです。
リモート処理は、WCF などと呼ぶか、シリアル化可能な型を渡すか、MBRO 型 (MarshalByRefObjects) を使用するかに関係なく、唯一の選択肢です。思ったほど難しくありません。
-オイシン
AppDomain.SetDataも使用できることを発見しましたが、これはホストドメインから子ドメインへの1つの方法にすぎません。
static void RunInChildDomain()
{
AppDomain childDomain = AppDomain.CreateDomain("friendlyName");
string parameterValue = "notmii";
childDomain.SetData("parameter", parameterValue);
childDomain.DoCallBack(PrintName);
}
static void PrintName()
{
string Name = Convert.ToString(AppDomain.CurrentDomain.GetData("parameter"));
Console.WriteLine(Name);
}
AppDomain.FirstChanceExceptionイベントを使用して、子とホストのappdomain間に例外駆動型の通信を作成することもできます:)
ざっと考えただけですが、もちろん.NET 3.0からはクロスドメイン通信でもWCFが推奨されると聞きました。リモート処理は WCF によってラップされた別のテクノロジであるため、実際にはこれは理にかなっています。