この投稿の例に似たコードを書きました: .NET Remotingコールバック (コールバックオブジェクトをリモートメソッドに渡します)。
私が知ったように、オーバーライドしなかった場合MarshalByRefObject.InitializeLifetimeService()
、しばらくすると、サーバーはコールバックの呼び出しに失敗しました。だから私はそれをオーバーライドしてnull(無限の寿命)を返し、それは機能します。
しかし今、私はゴミ収集について少し心配しています:
- そのようなオブジェクトは通常どおりGCによって収集されますか、それともリモートであるために存続しますか?
- 私はこの方法を見つけました:
RemotingServices.Disconnect()
コールバックオブジェクトで呼び出すと、ライフタイムポリシーが無関係になり、ガベージコレクションが行われることが保証されますか?
私がそれを正しくやっていれば、私は専門家の意見が欲しかった。
ありがとう、ギル。
PS。私は.NET2.0の制約の下で作業しているため、WCFに切り替えることをお勧めしますが、正しいとは言えません。:)