Аннотация:
В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.
Re: Технологии построения распределенных приложений в .NET
Существенное замечание по статье. Вместо ДальноЗов лучше класс назвать
1. ВечныйЗов (дань признания нажему кинематогрофу, забывчатым юзерам, или проблемам с серверам
2. ЗовИзДалёка (типа "Прекрасное Далеко не будь со мной жестоко")
3.ПозовиМеняВНочи (когда нагрузка на сервер поменьше)
итд.
Предлагаю открыть конкурс по названию рускоязычного RemotingCall
и солнце б утром не вставало, когда бы не было меня
Re[2]: Технологии построения распределенных приложений в .NE
Re: Технологии построения распределенных приложений в .NET
От:
Аноним
Дата:
13.12.04 05:13
Оценка:
Здравствуйте, Мика Сухов (mika), Вы писали:
МСM>Статья:
МСM>Авторы: МСM> Мика Сухов (mika)
МСM>Аннотация: МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.
Извините, что-то я не нашел прилагающегося к статье кода. где его можно взять?
Заранее спасибо.
Re[2]: Технологии построения распределенных приложений в .NE
МСM>>Авторы: МСM>> Мика Сухов (mika)
МСM>>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET.
А>Извините, что-то я не нашел прилагающегося к статье кода. где его можно взять?
МСM>Авторы: МСM> Мика Сухов (mika)
МСM>Аннотация: МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.
Скажите когда выйдет вторая версия dotnet?
Re: Технологии построения распределенных приложений в .NET
Существует еще несколько технологий удаленного взаимодействия, например, каналы (pipes). Такая технология очень удобна для межпроцессного общения разных программ. Классический пример: программа анализирует довольно-таки большое количество информации. При этом у нее нет пользовательского интерфейса (например, сервис NT). Чтобы узнать, исправно ли она работает, или изменить уже существующие настройки, к ней подключается административная консоль. Делать взаимодействие на сокетах ради локальной программы несколько расточительно. Именно для этого лучше всего использовать каналы.
Но как бы хороша или плоха не была эта технология, для них не нашлось ниши в .NET. Во Framework нет типов, через которые можно работать с каналами. Поэтому единственный способ использования их – это взаимодействие с неуправляемым кодом (System.Runtime.InteropServices), что не может не огорчать.
В .NET 2.0 появилась такая возможность, как работа с пайпами через канал IpcChannel. Не забыли пайпы
Re[2]: Технологии построения распределенных приложений в .NE
МСM>Авторы: МСM> Мика Сухов (mika)
МСM>Аннотация: МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.
Здравствйте, у меня возникла проблемма. скачал исходники для этой статьи и не могу их разобрать ((
Я всего неделю разбираюсь с C# и не могу понять что делать (и при помощи чего) с файлами .etp я верю что они играют какую-то хитрую роль )))
как я понимаю надо прикрутить к проекту namespace RSDN и тд. а там дальше — разобраться проще, но как это сделать ???
Re: Технологии построения распределенных приложений в .NET
не позволяет после вызова метода obj.SomeMethod(message); (ну или любого друго) более работать с объектом obj (не знаю с чем это связано, думаю что на этот объект выделяется севером какой-то поток, и по вызову какого либо метода его закрывает(если я тут ересь написал — на судите строго ... я только учусь=\ ))
Так вот, obj уже не удается использовать для вызова других методов, пирходится создавать на вызов каждого метода новый объект, а он отжирает по 300кб РАМа, и самое противное в том, что (непонятно из-за чего) память постоянно выделяется и не освобождается
for example:
public static DataSet cl_sel_all(string limit)
{
DataSet dbSet = new DataSet("DataSet");
try
{
ClientChannel channel = new ClientChannel(new Uri(_URL));
IRemoteObject obj = RemotingServices.GetRemoteObject(typeof(IRemoteObject), channel) as IRemoteObject;
dbSet = obj.sv_sel_all(limit,_SID);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"Error");
}
return dbSet;
}
это метод на клиенте (приходится писать ткаую страшную и некрасивую штуку, что бы иметь возможность вызывать серверные методы)
Но при создании объекта obj выделяется память, которая, о выходу из метода cl_sel_all не освобождается =\
/*VS2003*/
только не надо предлагать переход на VS2005 плз.
C++Builder6, C#.NET
Re[2]: Технологии построения распределенных приложений в .NE
ZK>не позволяет после вызова метода obj.SomeMethod(message); (ну или любого друго) более работать с объектом obj (не знаю с чем это связано, думаю что на этот объект выделяется севером какой-то поток, и по вызову какого либо метода его закрывает(если я тут ересь написал — на судите строго ... я только учусь=\ )) ZK>Так вот, obj уже не удается использовать для вызова других методов, пирходится создавать на вызов каждого метода новый объект, а он отжирает по 300кб РАМа, и самое противное в том, что (непонятно из-за чего) память постоянно выделяется и не освобождается
На первый взгляд, скорее всего, у вас проблема с лицензией. Удаленный объект после активации живет НЕ вечно.
Вам необходимо переопределить метод InitializeLifetimeService и вернуть null если хотите чтобы объект "жил" вечно.
public override Object InitializeLifetimeService()
{
/*
ILease lease = (ILease)base.InitializeLifetimeService();
if (lease.CurrentState == LeaseState.Initial)
{
lease.InitialLeaseTime = TimeSpan.FromMinutes(1);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
}
return lease;
*/
//лицензия никогда не кончаетсяreturn null;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Технологии построения распределенных приложений в .NE
С>На первый взгляд, скорее всего, у вас проблема с лицензией. Удаленный объект после активации живет НЕ вечно. С>Вам необходимо переопределить метод и вернуть null если хотите чтобы объект "жил" вечно.
Может я че не так делаю ... но каким образом переопределить InitializeLifetimeService и где я не знаю, и не видел ни строчки, где есть хоть какое — то упомминание и каких-то там лицензиях ... я взял все коды из этой статьи для VS2003 и никаких упоминаний InitializeLifetimeService в кодах я не видел ...Если можно, объясните дураку что да как и куда копать
C++Builder6, C#.NET
Re[4]: Технологии построения распределенных приложений в .NE
Здравствуйте, ZaKi, Вы писали: >>>InitializeLifetimeService в кодах я не видел ...Если можно, объясните дураку что да как и куда копать
InitializeLifetimeService — это метод класса MarshalByRefObject от которого наследуются классы удаленных объектов.
этот метод управляет лицензией объекта, по-умолчанию время жизни(лицензия) proxy удаленного объекта не вечно. И по истечении этого времени proxy-объект уничтожается, а при следующем вызове создается снова.
Можно по какому то событию продлить лицензию, но проще прото переопределить метод InitializeLifetimeService и вернуть null (хороший вариант если ваш объект представляет некий сервис с хранением состояния).
Для примеров приведенных в статье видимо это не особо и требовалось.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Технологии построения распределенных приложений в .NE
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, снежок, Вы писали:
С>>Для примеров приведенных в статье видимо это не особо и требовалось.
MS>Да, ребята, не уважаете вы классиков
Уважаем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
C++Builder6, C#.NET
Re[6]: Технологии построения распределенных приложений в .NE
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, снежок, Вы писали:
С>>Для примеров приведенных в статье видимо это не особо и требовалось.
MS>Да, ребята, не уважаете вы классиков
Хотелось бы задать вопрос напрямую автору, в классе TransparentProxyGenerator (как я понял) генерируется объект типа TransparentProxy, он собственно и передается клиенту по вызову метода
ClientChannel channel = new ClientChannel(new Uri(_URL));
IRemoteObject obj = RemotingServices.GetRemoteObject(typeof(IRemoteObject), channel) as IRemoteObject;
насколько я понял оверрайдить надо именно этот объект, ну что бы он "Жил вечно" (ну или я вообще ниче не понял)
public override Object InitializeLifetimeService()
public override Object InitializeLifetimeService()
{
//лицензия никогда не кончаетсяreturn null;
}
вот собственно это мне и не понятно ... как это сделать ??
пока что obj живет до первого вызова любого его метода, при последующем его использовании пишет "Unabe to write data to transport connection"
тут меня устроило бы 2 исхода, или obj каким-то чудом станет "многоразовым", либо пусть одноразовый, но пусть хотя бы при отсылке obj на клиента закрывался бы коннект (ибо фаерволл пишет о "живых" коннектах к серверу, и при каждом коннекте отжирается РАМ ... понемногу(200-300кб) но каждый раз ...)
(если где ерись написал не судите строго, я на С# 2-3 месяца пишу ...)