Технологии построения распределенных приложений в .NET
От: Мика Сухов (mika) Stock#
Дата: 09.06.04 03:12
Оценка: 1180 (15) +1
Статья:
Технологии построения распределенных приложений в .NET
Автор(ы): Мика Сухов
Дата: 06.11.2004
В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.



Авторы:
Мика Сухов (mika)

Аннотация:
В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.
Re: Технологии построения распределенных приложений в .NET
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.06.04 16:27
Оценка: 1 (1) :))) :))) :)
Здравствуйте, Мика Сухов (mika), Вы писали:

Существенное замечание по статье. Вместо ДальноЗов лучше класс назвать
1. ВечныйЗов (дань признания нажему кинематогрофу, забывчатым юзерам, или проблемам с серверам
2. ЗовИзДалёка (типа "Прекрасное Далеко не будь со мной жестоко")
3.ПозовиМеняВНочи (когда нагрузка на сервер поменьше)
итд.

Предлагаю открыть конкурс по названию рускоязычного RemotingCall
и солнце б утром не вставало, когда бы не было меня
Re[2]: Технологии построения распределенных приложений в .NE
От: mikа Stock#
Дата: 22.06.04 05:56
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Предлагаю открыть конкурс по названию рускоязычного RemotingCall


Предлагаю не парится по этому поводу . Название — трейдмарк
Re[3]: Технологии построения распределенных приложений в .NE
От: mikа Stock#
Дата: 20.09.04 09:53
Оценка: 21 (2)
Здравствуйте, mikа, Вы писали:

http://www.gotdotnet.ru/LearnDotNet/NETFramework/71286.aspx
Re: Технологии построения распределенных приложений в .NET
От: Аноним  
Дата: 13.12.04 05:13
Оценка:
Здравствуйте, Мика Сухов (mika), Вы писали:

МСM>Статья:



МСM>Авторы:

МСM> Мика Сухов (mika)

МСM>Аннотация:

МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.

Извините, что-то я не нашел прилагающегося к статье кода. где его можно взять?
Заранее спасибо.
Re[2]: Технологии построения распределенных приложений в .NE
От: Igor Sukhov  
Дата: 13.12.04 07:42
Оценка: 10 (1)
Здравствуйте, Аноним, Вы писали:


МСM>>Авторы:

МСM>> Мика Сухов (mika)

МСM>>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET.


А>Извините, что-то я не нашел прилагающегося к статье кода. где его можно взять?


вот тут :

http://www.gotdotnet.ru/LearnDotNet/NETFramework/71286.aspx

в самом низу страницы.
* thriving in a production environment *
Re: Технологии построения распределенных приложений в .NET
От: Аноним  
Дата: 11.05.05 12:48
Оценка: :)))
Здравствуйте, Мика Сухов (mika), Вы писали:

МСM>Статья:

МСM>Технологии построения распределенных приложений в .NET
Автор(ы): Мика Сухов
Дата: 06.11.2004
В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.



МСM>Авторы:

МСM> Мика Сухов (mika)

МСM>Аннотация:

МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.

Скажите когда выйдет вторая версия dotnet?
Re: Технологии построения распределенных приложений в .NET
От: Ракот  
Дата: 08.07.05 13:44
Оценка:
Здравствуйте, Мика Сухов (mika), Вы писали:

Существует еще несколько технологий удаленного взаимодействия, например, каналы (pipes). Такая технология очень удобна для межпроцессного общения разных программ. Классический пример: программа анализирует довольно-таки большое количество информации. При этом у нее нет пользовательского интерфейса (например, сервис NT). Чтобы узнать, исправно ли она работает, или изменить уже существующие настройки, к ней подключается административная консоль. Делать взаимодействие на сокетах ради локальной программы несколько расточительно. Именно для этого лучше всего использовать каналы.

Но как бы хороша или плоха не была эта технология, для них не нашлось ниши в .NET. Во Framework нет типов, через которые можно работать с каналами. Поэтому единственный способ использования их – это взаимодействие с неуправляемым кодом (System.Runtime.InteropServices), что не может не огорчать.


В .NET 2.0 появилась такая возможность, как работа с пайпами через канал IpcChannel. Не забыли пайпы
Re[2]: Технологии построения распределенных приложений в .NE
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.07.05 13:29
Оценка: +1
Здравствуйте, Ракот, Вы писали:

Р>В .NET 2.0 появилась такая возможность, как работа с пайпами через канал IpcChannel. Не забыли пайпы


Только для ремоутинга. А класс IpcPort сделан internal, так что просто пообщаться по пайпу не выйдет.
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re: Технологии построения распределенных приложений в .NET
От: Аноним  
Дата: 14.03.06 13:57
Оценка:
Здравствуйте, Мика Сухов (mika), Вы писали:

МСM>Статья:

МСM>Технологии построения распределенных приложений в .NET
Автор(ы): Мика Сухов
Дата: 06.11.2004
В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.



МСM>Авторы:

МСM> Мика Сухов (mika)

МСM>Аннотация:

МСM>В статье разбираются различные способы коммуникации между процессами и доменами приложений в .NET. Затрагиваются вопросы безопасности и другие аспекты использования технологий удаленного взаимодействия.

Здравствйте, у меня возникла проблемма. скачал исходники для этой статьи и не могу их разобрать ((
Я всего неделю разбираюсь с C# и не могу понять что делать (и при помощи чего) с файлами .etp я верю что они играют какую-то хитрую роль )))
как я понимаю надо прикрутить к проекту namespace RSDN и тд. а там дальше — разобраться проще, но как это сделать ???
Re: Технологии построения распределенных приложений в .NET
От: ZaKi Россия  
Дата: 21.07.06 18:36
Оценка:
Здравствуйте, Мика Сухов (mika)

У меня возникла небольшая проблемма с вашим кодом.
дело в том, что следующтй код
ClientChannel channel = new ClientChannel(new Uri("tcp://localhost:8320/RemObj"));
IRemoteObject obj = RemotingServices.GetRemoteObject<IRemoteObject>(channel);

Console.Write("Введите сообщение: ");
string message = Console.ReadLine();

не позволяет после вызова метода 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
От: снежок Россия  
Дата: 24.07.06 12:05
Оценка:
Здравствуйте, ZaKi, Вы писали:

ZK>У меня возникла небольшая проблемма с вашим кодом.

ZK>дело в том, что следующтй код
ZK>
ZK>ClientChannel channel = new ClientChannel(new Uri("tcp://localhost:8320/RemObj"));
ZK>IRemoteObject obj = RemotingServices.GetRemoteObject<IRemoteObject>(channel);

ZK>Console.Write("Введите сообщение: ");
ZK>string message = Console.ReadLine();
ZK>

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
От: ZaKi Россия  
Дата: 25.07.06 16:56
Оценка:
С>На первый взгляд, скорее всего, у вас проблема с лицензией. Удаленный объект после активации живет НЕ вечно.
С>Вам необходимо переопределить метод и вернуть null если хотите чтобы объект "жил" вечно.

Может я че не так делаю ... но каким образом переопределить InitializeLifetimeService и где я не знаю, и не видел ни строчки, где есть хоть какое — то упомминание и каких-то там лицензиях ... я взял все коды из этой статьи для VS2003 и никаких упоминаний InitializeLifetimeService в кодах я не видел ...Если можно, объясните дураку что да как и куда копать
C++Builder6, C#.NET
Re[4]: Технологии построения распределенных приложений в .NE
От: снежок Россия  
Дата: 25.07.06 19:24
Оценка:
Здравствуйте, ZaKi, Вы писали:
>>>InitializeLifetimeService в кодах я не видел ...Если можно, объясните дураку что да как и куда копать
InitializeLifetimeService — это метод класса MarshalByRefObject от которого наследуются классы удаленных объектов.
этот метод управляет лицензией объекта, по-умолчанию время жизни(лицензия) proxy удаленного объекта не вечно. И по истечении этого времени proxy-объект уничтожается, а при следующем вызове создается снова.
Можно по какому то событию продлить лицензию, но проще прото переопределить метод InitializeLifetimeService и вернуть null (хороший вариант если ваш объект представляет некий сервис с хранением состояния).
Для примеров приведенных в статье видимо это не особо и требовалось.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Технологии построения распределенных приложений в .NE
От: Mika Soukhov Stock#
Дата: 26.07.06 07:21
Оценка:
Здравствуйте, снежок, Вы писали:

С>Для примеров приведенных в статье видимо это не особо и требовалось.


Да, ребята, не уважаете вы классиков
Re[5]: Технологии построения распределенных приложений в .NE
От: ZaKi Россия  
Дата: 27.07.06 13:24
Оценка:
Здравствуйте, снежок, Вы писали:

С>InitializeLifetimeService — это метод класса MarshalByRefObject от которого наследуются классы удаленных объектов.


Спасибо! Буду разбираться ...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
C++Builder6, C#.NET
Re[6]: Технологии построения распределенных приложений в .NE
От: ZaKi Россия  
Дата: 27.07.06 13:24
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, снежок, Вы писали:


С>>Для примеров приведенных в статье видимо это не особо и требовалось.


MS>Да, ребята, не уважаете вы классиков

Уважаем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
C++Builder6, C#.NET
Re[6]: Технологии построения распределенных приложений в .NE
От: ZaKi Россия  
Дата: 30.07.06 15:20
Оценка:
Здравствуйте, 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 месяца пишу ...)
C++Builder6, C#.NET
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.