Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

valager


Молчун

Зарегистрирован:
16 February 2007
Сообщения: 22
Примеры кода: 0
 

Net.Remoting, как узнать, на каких компьютерах опубликован объект

16 February 2007 17:29  


Всем доброго времени суток. Это мой первый пост в этом форумеУлыбка

Net.Remoting-ом занялся недавно. Прежде чем задать вопрос, подробно опишу ситуацию:

Я написал небольшой класс, добустим MyRemoteObjectClass и сделал его MarshalByRefObject.

Далее я написал сервер, который публикует объект этого класса и делает его доступным по протоколу HTTP на порте 3900.

ChannelServices.RegisterChannel(new HttpChannel(3900));
MyRemoteObject = new MyRemoteObjectClass();
RemotingServices.Marshal(MyRemoteObject , "MyRemoteObject ");

Затем я все это откомпилировал, поставил на нескольких машинах в сети. Теперь мой объект на этих машинах доступен по следующему URL: [A]<имя">http://<имя[/A] машины>:3900/MyRemoteObject

Написал клиента. Этот клиент должен получить список всех машин сети (с этим я справился). Далее он должен определить, на каких машинах запущен "MyRemoteObject" на 3900-м порте и вывести список таких машин на экран.

!! И вот тут вопрос! Как это сделать ? Как определить что на указанной машине запущен и в данный момент работает определенный объект ?

Далее напишу, что уже пробовал:

1. Пытаюсь подключиться к этому объекту на каждой машине, вызвать какой-нибудь его метод и ловить Exception. Если Exception есть, значит объекта нет, если Exception-а нет, значит объект есть. Вот примерно так:

srv = "какая-нибудь машина в сети";
try
{
MyRemoteObjectClass MyRemoteObject = (MyRemoveObjectClass)Activator.GetObject(typeof(MyRemoteObjectClass), "http://" + srv + ":3900/MyRemoteObject");

MyRemoteObject.SomeMethod(); // здесь должен быть Exception
// если Exception не возник, то объект есть
}
catch (Exception e)
{
// объекта нет
}

Это работает. Но уж очень долго он пытается коннектится к несуществующему объекту на каждой машине. Да и некрасивый это способ.

2. С помощью Socket-ов. Еще не пробовал. Допустим поставить TCP Listener на 3900 порт сервера и коннектится к нему TCPClient-ом. Далее посылать серверу тестовое сообщение и ждать отклик. Но мне совершенно не нужны сокеты для задачи этой программы и это как я понимаю даст ответ только на вопрос: доступен ли порт 3900. А я хочу знать, запущен ли на сервере объект MyRemoteObject.

Скажите пожалуйста, есть ли какие-нибудь методы более красиво решать такую задачу. А может быть я как-то не прав в тех методах, которые уже пробовал. Буду рад любым советам по этому поводу.

Еще второй вопрос. Есть ли какие-нибудь готовые и желательно бесплатные программы, которые показывают список всех опубликованных через .NET.Remoting объектов на компьютере? Сбросьте пожалуйста ссылки, если таковые есть.








Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 16 February 2007 17:29
Наверх
  



.NET Beta

 Net.Remoting, как узнать, на каких компьютерах опубликован объектvalager  16 February 2007 17:29
 Net.Remoting, как узнать, на каких компьютерах опубликован объектVasyaM  27 February 2007 08:30
 Net.Remoting, как узнать, на каких компьютерах опубликован объектvalager  28 February 2007 16:36
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта