Я прочитал здесь: Ошибка 10048 при попытке открыть TcpChannel
У меня возникла, как мне казалось, похожая проблема - очевидно, нет. Я воспользовался советом первого респондента для сброса winsock (как, в любом случае, повреждает winsock?). В любом случае, вот регистрация моего канала:
channel = new TcpChannel(channelPort);
ChannelServices.RegisterChannel(channel, false);
и клиент звонит:
// Create a channel for communicating w/ the remote object
// Notice no port is specified on the client
TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel, false);
// Create an instance of the remote object
CommonDataObject obj = Activator.GetObject( typeof(CommonDataObject) ,
"tcp://localhost:49500/CommonDataObject") as CommonDataObject;
Это кажется слишком простым, чтобы быть таким трудным для использования. Но проблема, похоже, связана с сервером ChannelServices.RegisterChannel (...). Теперь я включил клиентскую часть в то, что экземпляры клиента проверяют объект сервера. Если он не может его найти, он «подталкивает» сервер к самому экземпляру. Что мне было интересно, так это то, что если сначала проверить доступность объекта (например, Activator.GetObject (...)), ChannelServices «подумает», что этот канал TCP уже зарегистрирован? Звучит глупо, но это мое единственное возможное объяснение. Я выключил брандмауэр, антигрибковое приложение и перезагрузился. Тем не менее получить это
Канал 'tcp' уже
зарегистрирован.
Я посмотрел на трассировку стека и заметил:
at System.Runtime.Remoting.Channels.ChannelServices.RegisterChannelInternal(IChannel chnl, Boolean ensureSecurity)
at System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(IChannel chnl, Boolean ensureSecurity)
Мне было интересно, может ли RegisterChannelInternal (...) быть причиной "уже зарегистрированной" проблемы. Итак, кроме этого, я в растерянности ...
Возможно, что вызов, который я делаю, чтобы проверить этот канал, вызывает его. Если это консенсус, то мой вопрос меняется на: Как я могу опросить канал?
UPDATE:
После удаления первоначальной проверки сервера с клиента и «предположения», что сервер должен быть создан, я обнаружил, что проверка клиента вызывает проблему. Мне удалось запустить сервер, и клиент получил объект «Прозрачный прокси». Но все еще остается вопрос: «Как я могу опрашивать, чтобы узнать, установлен ли сервер?»