Итак по пунктам. Почти один к одному с MSDN.
1. Создаю класс спонсора и сую его в dll видимую как на клиенте, так на плагах и на сервере. Создаю по MSDN:
----------------
public class PlugSponsor : MarshalByRefObject, ISponsor
{
private DateTime lastRenewal;
public PlugSponsor()
{ lastRenewal = DateTime.Now; }
public TimeSpan Renewal(ILease lease)
{ lastRenewal = DateTime.Now;
return TimeSpan.FromSeconds(20); } }
----------------
2. В каждом плате перегружаю:
----------------
public override object InitializeLifetimeService()
{ ILease lease = (ILease)base.InitializeLifetimeService();
if (lease.CurrentState == LeaseState.Initial)
{ lease.InitialLeaseTime = TimeSpan.FromSeconds(3);
lease.SponsorshipTimeout = TimeSpan.FromSeconds(10);
lease.RenewOnCallTime = TimeSpan.FromSeconds(2); }
return lease; }
----------------
3. На сервере регистрирую плаги с объектами так:
----------------
foreach (APLG plug in this.plugsLoader.ArrayOfAvailablePlugs)
{ System.Type plugType = plug.Instance.GetType();
string plugUri = plug.Instance.Plug.PlugNick;
RemotingConfiguration.RegisterWellKnownServiceType(plugType,plug.Instance.Plug.PlugNick,WellKnownObjectMode.Singleton); }
----------------
4. На клиенте создаю спонсора (либо для каждого запуска своего — эффект один):
----------------
private TE.UNITS.PlugSponsor plugSponsor = new PlugSponsor();
----------------
5. На кленте активирую плаг так:
----------------
objectUrl = "
tcp://" + setera.ERM + ":" + this.station.RemotePort + "/" + setera.ERA;
era = (IERA)Activator.GetObject(typeof(IERA),objectUrl);
if (era != null)
{ era.unitEvent += new UnitEvent(this.unitEventReceiver.UnitEventHandler);
//--- Set sponsor ---
ILease plugLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)era);
plugLease.Register(this.plugSponsor);
//-------------------
success = true; }
--------
"era" плаг запускается, но если к нему больше 5 минут не обращаешся все равно дохнет или там отключается через 5 мин! При обращении выдает ошибку:
------------
An unhandled exception of type 'System.Runtime.Remoting.RemotingException' occurred in mscorlib.dll
Additional information: Object </d03c6feb_383b_48d2_ad82_df69fe75abcd/RIeV_yzcG_6QauqQIPTk9_z2_11.rem> has been disconnected or does not exist at the server.
------------
Спонсор не меняет аренду. Хотя и назначен.
Какие манипуляции нужно сделать, чтоб давал?
Как посмотреть какой объект именно сдох (может и не тот объект? не era?)