Здравствуйте, Димон, Вы писали:
Д>Есть. Я же говорил вам надо смотреть в сторону спонсоров. На клиенте регистрируются спонсоры, раздающие лиц на опр время жизни. Сервак знает о спонсорах и переодически опрашивает их.
Д>
данное сообщение получено с www.gotdotnet.ru
Д>ссылка на оригинальное сообщение
Да скорее всего прийдеться так. Уж очнь не хочеться структуру перелавывать работающую.
А вообще спонсор — что за зверь — отдельный сингтон? Какого типа объект может быть? И может ли он через интерфейсы с объектами работать? Может тутор какой-нить есть?
Спасибо.
Эх жаль я примерчик потерял. ПОстараюсь нарыть.
На самом деле спонсорство это штатное средство. Ничего сложного, просто один затык с которым я долбился: спонсора обязательно объявлять (то бишь клиент становится сервером, а сервер — клиентом по отношению к спонсору). ИМХО возможно даже переделывать особо не придется может наследуетесь или переопределите механизм времени жизни.
Постараюсь чонить нарыть...
С/у Дмитрий.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Копать Вам нужно в сторону ISponsor, а механизм называется механизм аренды. ПОсле того как в нем разберешься, бесконечное время жизни кажется варварством.
С/у Дмитрий.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Итак по пунктам. Почти один к одному с 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?)
>Второй признаться настораживает. "внешне (т.е в конфиг файле)" Что конфигурационый файл обязательно? У меня весь ремотинг программно конфигурируется. Видите ли у меня локальная мультисерверная система. Клиент один — серверов много, и мне как-то показалось, что бес конфиг-файлов удобнее. Заработает ли при программном конфигурировании?<
Чот глюки на гдн в выходные. Я исправил сообщение, а оно поползло. Если вы не пользуетесь конфигом дела сильно не меняет, смысл один надо спонсора внешне объявлять (забыл термин, типа хорошо известные объекты, кроче welknown), приходится на пальцах, тк щас не решусь все это восстановить.
>ПС Проблемы у меня с GotDotNet — пароль забыл, а он на почтовый ящик не отсылает — раз 100 пробовал получить — не отсылает. У вас такоебыло?<
У меня были замороки, но както выкрутился. Там раньше мраки были с паспортом, благо щас по паролю сделали. Кроче как то я пароль восстановил, там он у них какой-то мрачный (бракозябры какие-то), исправил на нормальный и щас нет проблем, тем более оперой пользуюсь, автоматом входит. Правда гдн, как и мс оперу за браузер не считает, поэтому форматирование никакое

С/у Дмитрий.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
У меня были такие же грабли. Я об этом грил. Правда я делал с конфиг файлами. Если мне не изменяет память спонсора нужно не просто инициал конструктором, а как и плаги ваши RemotingConfiguration.RegisterWellKnownServiceType ... Могу заблуждаться, но имхо так.
С/у Дмитрий.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Кроче сервак просто не видит вашего спонсора, поэтому он не продлевает время жизни клиента.
С/у Дмитрий.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение