Добрый день.
Есть некий сервер. Сервер регистрирует HTTP канал на неком порту и предоставляет некий класс по Remoting с серверной активацией (модель Singleton).
Некоторый клиент обращающается по Remotiong к этому серверу.
Клиент и сервер запущены на одной машине и в строке соединения у клиента прописан localhost. Однако машина подключена в сеть.
Клиент подключается к серверу — все ОК. Однако, если отсоединить машину от сети (вырвать кабель, например), то клиенту при очередном обращении к серверу кидается исключение:
System.Net.WebException: The underlying connection was closed: Unable to connect to the remote server
Может кто знает причину такого поведения и как с этим бороться (хотельсь бы, чтобы работа клиента и сервера на локальной машине не зависила бы от сети, к которой данная машина подключена).
Заранее спасибо.
Дальнейшее копание в проблеме выявило следующие интересные особенности:
— такая ситуация проявляется и с TCP протоколом
— такая ситуация не проявляется, если вызывается метод объекта полученного "напрямую" через Remoting
т.е.
Class1 c = (Class1)Activator.GetObject( typeof( Class2 ), "tcp://127.0.0.1:6666/Class2" );
c.Test();
— такая ситуация возникает, если вызывается метод подобъекта объекта, полученного "напрямую" через Remoting
т.е.
Class1 c = (Class1)Activator.GetObject( typeof( Class2 ), "tcp://127.0.0.1:6666/Class2" );
c.SomeClass3.Test();
— более подробно исключение звучит так: "затребованное имя найденно в базе данных, но для имени отсутствуют связанные с ним данные, которые были разрешены для него".
— для сервера, запущенного тогда, когда машина отключена от сети такая проблемма не появляется...
Здравствуйте, Sotnich, Вы писали:
S>Дальнейшее копание в проблеме выявило следующие интересные особенности:
S> [...]
Проблемма пофиксилась вот так:
System.Collections.IDictionary props = new System.Collections.Hashtable();
props["machineName"] = "MASHINENAME";
ChannelServices.RegisterChannel( new HttpChannel( props, clientProvider, provider) );
Вообще ситуация стала более понятна — при включенном соединении создавался канал с реальным IP адресом, связанный с ним URI был примерно такого вида tcp://192.168.0.101:6666. После отключения от сети, естественно такой IP переставал действовать...
НО!!!!!! Почему работало соединение с объектом, полученным "напрямую", а с "полученным косвенно" не работало!!!! Канал ведь один и тот же.
Помнится, тут кто-то жаловался, что РСДН оскудел на сложные вопросы
Hello, "Sotnich" > > НО!!!!!! > Почему работало соединение с объектом, полученным "напрямую", а с > "полученным косвенно" не работало!!!! Канал ведь один и тот же. > >
Это-же просто... В первом случае адрес объекта указывался явно, а в другом
адрес формировался сервером. В итоге, получалось, что у клиента и у сервера
было разное мнение относительно того, как с ним нужно работать...
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.