Рихтер пишет, что так как у типов в другом домене нету корней, то в CLR пошли на хитрость: прокси объекты живут ~5 минут с момента последнего обращения, после чего умирают. Получается, что эти объекты нужно постоянно "пинать", что бы CLR их не выгружал, а если выгрузил, то создавать по новой?
Ответ 5 минут — время жизни MarshalByRefObject по умолчанию (начальное, а не после последнего обращения). Его можно изменить установкой статического свойства LifetimeServices.LeaseTime в целевом домене: public class MyObject : MarshalByRefObject { static MyObject() { TimeSpan t = TimeSpan.FromHours(24) LifetimeServices.LeaseTime = t } } Но лучше, скорее всего, переопределить метод InitializeLifetimeService для конкретного объекта, который должен жить долго, чтобы он возвращал null: [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)] public override object InitializeLifetimeService() { return null } Тогда для этого объекта не будет использоваться управление временем жизни и он умрет только с выгрузкой всего домена.