Привязка удаленного взаимодействия.NET ко всем сетевым картам
Я работаю над серверным приложением удаленного взаимодействия.NET, чтобы попытаться связать его со всеми доступными сетевыми картами, чтобы оно слушало несколько подсетей.
В настоящее время мы делаем это, приказывая серверу связываться с определенным IP-адресом, который работал в прошлом, но при размещении на сервере с несколькими подсетями все клиенты должны находиться в одной подсети, иначе они не будут быть в состоянии говорить с сервером.
Одно из решений, которое я попытался, - указать серверу привязаться к имени компьютера, на котором он работал, с помощью следующего кода:
// If there is an IP present in the config to bind to, then bind on that specific IP.
if (!string.IsNullOrEmpty(remotingBindTo))
{
props.Add("bindTo", remotingBindTo);
}
// Otherwise bind on the machine name, meaning the server should bind on all IP addresses.
else
{
props.Add("machineName", Environment.MachineName);
props.Add("useIpAddress", false);
}
// Create a new channel
IChannel channel = new TcpServerChannel(props, null);
// Register the channel
ChannelServices.RegisterChannel(channel, remotingSecure);
Это в основном говорит, что если параметр конфигурации сервера "RemotingBindTo" установлен, то мы привязываемся к предоставленному IP-адресу, в противном случае мы привязываемся к имени машины.
Проблема в том, что если вы используете VPN-соединение для подключения клиента к серверу. Когда клиент создает прокси для объекта сервера, он пытается подключиться через имя компьютера, и клиентский ПК не может разрешить это с IP-адресом. Обойти это можно было, поместив имя в файл хостов Windows и указав, что оно должно преобразовываться в IP-адрес VPN, но поскольку VPN каждый раз дает другой IP-адрес, это не является жизнеспособным решением.
Я предполагаю, что мой вопрос: возможно ли вообще заставить удаленный сервер.NET связываться со всеми доступными сетевыми картами /IP-адресами?
Кто-нибудь еще испытывал что-либо подобное?