ログにこのネタで調べられた形跡があったので。
.NET RemotingはTCP/IP(HTTP含む)を使ったソケット通信です。.NET Remotingサーバーはhttpdやftpd同様、接続を受けるためにTCP/IPのポートを受信可能状態で開く(ChannelServices.RegisterChannel)わけですが、一定時間接続が無いと.NET Frameworkによって開いたポートが自動的に破棄され、サーバーが動いていてもクライアントが接続できなくなる場合があります。
これを避けるひとつの方法が、破棄されないようにすること。.NET Remotingとリース時間(Lease time)という単語で検索すると、出てくると思います。いろいろ方法はありますが例を挙げますと、
- MarshalByRefObjectを継承したクラスでInitializeLifetimeServiceメソッドを以下のようにオーバーライドする。
public overrides InitializeLifetimeService() { return null; }
- 構成ファイル(XML)の//configuration/system.runtime.remoting/application以下に次の設定を加える。
<lifetime leaseTime="0" />
Comments