Как определить момент освобождения удалённого (remotable) объекта на стороне сервера?
Удалённый объект с клиентской активацией использует неуправляемые ресурсы, которые необходимо освободить как только объект будет отключён от клиента.
Я реализовал в классе удалённого объекта деструктор, но он не срабатывает ни тогда, когда объект становится недоступен со стороны клиента, ни в обозримом времени после.
Есть ли какой-то вариант, кроме таймера, определить на сервере, что время жизни объекта не продлено спонсором на строне клиента?
Вариант с таймером:
public конструктор или любой другой метод() {
_lts = (ILease)GetLifetimeService();
_tmr = new Timer(OnFire, null, 10000, 10000);
}
void OnFire(object state) {
if (_lts.CurrentState == LeaseState.Expired) { _tmr.Dispose(); Dispose(); }
}
P. S. Неуправляемые ресурсы нужно освободить как только, так сразу. В общем, когда у удалённого объекта кончается время жизни, на стороне клиента ссылка становится null, но на стороне сервера ничего не происходит. Я думал, что там объект убивается, и поэтому решил использовать деструктор, но оказалось, что это не так.
Я думал, что можно вклиниться куда-то в промежуточные объекты, там их много: прозрачный прокси, настоящий прокси, форматировщики и пр. - это со стороны клиента. Со стороны сервера их меньше, но тоже есть. На какой-то картинке я видел на стороне сервера диспетчер, но ни в описании .Net Remoting, ни в описании Remoting API я ничего не нашёл. А думал именно о таком варианте.