問題タブ [marshalbyrefobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1236 参照

c# - セカンダリ ドメインからメイン アプリケーション ドメインのメソッドを呼び出して値を取得する

C# IRC ボットのモジュール システムを実装しています。モジュールは、サブディレクトリ "modules" に格納されている .dll アセンブリであり、IRC に追加のコマンドを追加するなど、ボットに機能を追加するために使用されます。これらのモジュールは、実行時にロードおよびアンロードされるように設計されているため、アプリケーション全体を再起動することなく、ボットを更新したり、バグを修正したりできます。

現在、モジュール システムは、AppDomain読み込まれるモジュールごとに新しい を作成しCreateInstanceFromAndUnwrap、 というクラス内で使用してプロキシを作成しModuleHelperます。

このプロキシは から継承しMarshalByRefObjectます。

OnLoadOnUnloadモジュールがロードまたはアンロードされるときに呼び出されます。MarshalByRefObjectモジュールは、モジュール内のこのクラスなど、外部アセンブリ内のからも継承しますConfigurationReader.dll

問題は、メイン appdomain に属するものを変更すると (具体的には、新しいボットを IrcBot.Bots コレクションに追加するとIrcBot.Bots.Add(_configuration.Id, bot);) IrcBot.Bots、セカンダリ appdomain 内でのみカウントが増加し、必要なメイン appdomain では増加しないことです。 .

Console.WriteLining を少し実行したIrcBot.Bots.CountAdd、セカンダリ appdomain での呼び出しが 1 を返した後にOnLoad呼び出し、メイン appdomain での呼び出しが 0 を返した直後にもう一度呼び出すことがわかりました。これは悲惨な結果をもたらし、他のモジュールを引き起こします後でロードされて誤動作します。セカンダリ AppDomain で変更した後、メイン AppDomain のボット数を (とりわけ) 更新するにはどうすればよいですか?

0 投票する
1 に答える
500 参照

.net - MarshalByRefObject はどのように実装されていますか?

がどのように実装されているか、MarshalByRefObjectまたリモート処理でオブジェクトを参照渡しできる理由を知りたいです。

クラスの実装が原因で可能ですMarshalByRefObjectか、それともリモーティング ライブラリは、クラスが から派生したかどうかをチェックするだけMarshalByRefObjectですか?

0 投票する
2 に答える
14672 参照

c# - 元のタイプへの透過プロキシ

ContextBoundObject から継承されたクラスのインスタンスから作成された {System.Runtime.Remoting.Proxies.__TransparentProxy} 型のランタイム オブジェクトがあります。このクラスは、他のオブジェクトに対してイベントを発生させます。このプロキシ オブジェクトを元のオブジェクトに変換する必要があります。すべてのオブジェクトは、単一システムのデフォルトの AppDomain にあります。

それらを元のオブジェクトに変換する方法は? 同じメモリで実行している場合にプロキシが作成される理由

0 投票する
1 に答える
1103 参照

c# - 単純なクロスアプリオブジェクトのメモリリーク

クロスAppDomainオブジェクトを試していますが、非常に奇妙なことが1つ見つかりました。

MemoryStreamオブジェクトを割り当ててその参照を返す(呼び出し元によってすぐに破棄される)リモートメソッドを呼び出すと、GC.Collect()を呼び出した後でも、メモリ使用量が大幅に増加し、ドロップダウンしません。

毎回新しいStringまたはbyte[]オブジェクトを返す呼び出しメソッドでは、リークはありません。

メモリプロファイラーは、ほとんどのライブオブジェクトがタイプChar []およびString(MemoryStreamの場合)であることを示しています。

問題は-私は何かを誤解しましたか、そしてリモート呼び出しはMarshalByRefObjectから継承するほど単純ではありませんか?

0 投票する
2 に答える
3473 参照

c# - PowerShellから呼び出されたときにdllに透過プロキシをキャストできませんが、C#コンソールアプリでは成功します

新しいライブラリを生成し、その中でスクリプトを実行するオープンソースライブラリを作成しようとしています。PowerShellファイルの名前との名前を取得する静的メソッドがあります。このメソッドは、C#コンソールアプリから呼び出された場合は正常に実行されますが、実行されません。AppDomainPowerShellAppDomainPowerShell

フュージョンログにこのエントリがあるため、dllが2番目のアプリドメインに読み込まれていることがわかります。

クラス宣言とコンストラクターは次のようになります。

コンストラクター内のそのメッセージは、C#コンソールアプリから実行するかPowerShellアプリから実行するかに関係なく、 CreateInstanceFromAndUnwrapを呼び出すと出力されます。

以下の静的メソッドでAppDomainPoshRunnerCreateInstanceFromAndUnwrapに返された値をキャストすると、失敗が発生します。

PowerShellで実行すると、「透過プロキシをキャストできませんInvalidCastExcception」というメッセージが表示されますJustAProgrammer.ADPR.AppDomainPoshRunner

私は何が間違っているのですか?

0 投票する
1 に答える
4086 参照

xml - JAXB は、最初に包含によってマーシャリングし、その後の参照のために @XmlIDREF によってマーシャリングできますか?

クラスに注釈を付けて、マーシャラーが最初にオブジェクトに遭遇したときに適切な型の XML 要素を生成することができるかどうか疑問に思っていますが、それ以降のこのオブジェクトへの他の参照では、XML IDREF エントリが作成されますか?

0 投票する
1 に答える
168 参照

.net - サーバー側リストから切断されたMarshalByRefObjectsを削除する

.Net Remotingでは、リモートオブジェクトのリストを作成した場合、リモート側が消えてリストアイテムの1つにアクセスしようとすると、例外が発生します。

世界の終わりではなく、すべてうまくいって、あなたはそれを捕まえることを試みることができます。

MarshalByRefObjectただし、から切断されたものを削除しようとすると、が使用され、リストをクリーンアップできなくなるList<MarshalByRefObject>ため、別の例外が発生します。List.Remove()Object.Equals()

これは、オブジェクトのある種のローカルラッパーで解決する必要MarshalByRefObjectがありますか、それともよりクリーンなアプローチがありますか?

0 投票する
2 に答える
4820 参照

.net - MarshalByRefObjectとSerializableの混合

さまざまな情報源が

オブジェクトがMarshalByRefObjectから派生する場合、オブジェクト参照は、オブジェクト自体ではなく、あるアプリケーションドメインから別のアプリケーションドメインに渡されます。オブジェクトが[Serializable]でマークされている場合、オブジェクトは自動的にシリアル化され、あるアプリケーションドメインから別のアプリケーションドメインに転送されてから逆シリアル化され、2番目のアプリケーションドメインにオブジェクトの正確なコピーが生成されます。MarshalByRefObjectが参照を渡す間、[Serializable]によってオブジェクトがコピーされることに注意してください。[ソース]

AppDomainsを使用する最初のアプリを設計していますが、MarshalByRefObjectを実装していないシリアル化可能なオブジェクト内に参照を配置するとどうなるのでしょうかMarshalByRefObjects。これまでのところ、このテーマに関するドキュメントが見つかりません。

たとえば、AppDomainの境界を越えてList<MBR>whereを返そうとするとどうなりますか?それぞれが 元のオブジェクトMBR : MarshalByRefObjectのどこにあるかのコピーを取得できますか?また、2つのメカニズムの混合に関する技術的な詳細についてのドキュメントはありますか?List<MBR>MBRTransparentProxy

0 投票する
2 に答える
969 参照

.net - MarshalByRefObject がローカルかリモートかを検出するにはどうすればよいですか?

つまり、TransparentProxy またはローカル オブジェクトへの参照があるかどうかをどのように判断すればよいのでしょうか?

0 投票する
1 に答える
309 参照

c# - .Net 4インラインMarshalByRefObjectメソッドはありますか?

インライン化されていないメソッドに依存するコードがいくつかあります:

もちろん、これはDoSomethingメソッドがインライン化されていない場合にのみ機能します。これが、基本クラスがから派生する理由MarshallByRefObjectであり、パブリックメソッドのインライン化を妨げます。

これまでは機能していましたが、.Net 4サーバーからスタックトレースを取得し、スタックウォークがDoSomethingの呼び出し元に到達したことを示しています。

.Net 4インライン化はより巧妙であり、MyClassが内部であり、プロキシに置き換えられる可能性がないことを検出しますか?