|
|
|
 |
 |
Сообщение |
 |
|
 |
 |
Молчун
Зарегистрирован: 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
|
|
| Наверх |
|
|
|
 |
 |
 |
 |
|
|