Это отвратительно и не очень обобщенно, но должно работать для вас:
TcpChannel channel = (TcpChannel)ChannelServices.RegisteredChannels[0];
ChannelDataStore data = (ChannelDataStore)channel.ChannelData;
string uri = data.ChannelUris[0];
int port = int.Parse(uri.Substring(uri.LastIndexOf(':')));
Обратите внимание, что вам понадобится ссылка на System.Runtime.Remoting.dll и вам потребуется using
s для System.Runtime.Remoting.Channels
и System.Runtime.Remoting.Channels.Tcp
.
Конечно, если у вас зарегистрировано более одного канала, и / или это не TCP, и / или у вас более одного URI для канала, вам придется писать код лучше, чем хакерское задание I сделал выше, но это должно дать вам идею, в любом случае.
Как запускаются эти отдельные экземпляры сервера? Как порт выбирается в первую очередь? Как клиент обнаруживает порт? Ответы на эти вопросы могут раскрыть более идеальный способ различения экземпляра в коде сервера, например идентификатор экземпляра, передаваемый в командной строке.