Для проекта, над которым мы работаем, мы используем удаленное взаимодействие .NET для связи между сервером и клиентом. До сих пор мы тестировали его на одной машине и ее работе, используя localhost и произвольный номер порта. Однако при тестировании между двумя компьютерами в одной и той же сети, используя основной компонент, работает, но прокси-объект выходит из строя.Ошибка сокета при удалении .NET между двумя машинами
Мы используем файлы конфигурации, чтобы задать имя сервера и порт, как это:
<setting name="ServerName" serializeAs="String">
<value>192.168.1.141</value>
</setting>
<setting name="Port" serializeAs="String">
<value>9932</value>
</setting>
Клиент устанавливает объект удаленного взаимодействия следующим образом:
_port = global::ConsoleClient.Properties.Settings.Default.Port;
_servername = global::ConsoleClient.Properties.Settings.Default.ServerName;
string url = "tcp://" + _servername + ":" + _port + "/Lobby";
try
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
Lobby lobby = (Lobby)Activator.GetObject(
typeof(Lobby), url);
}
catch (Exception e)
{
}
Это прекрасно работает, и мы могут вызвать методы на объекте лобби. Однако, позже в коде, мы возвращаемся другой объект, таблица выглядит следующим образом:
table_proxy = lobby_proxy.joinTable(userID, i);
где lobby_proxy тот же объект лобби в предыдущем коде. Сервер настроен следующим образом:
_port = global::Server.Properties.Settings.Default.Port;
_lobby = new Lobby(_db);
try
{
TcpServerChannel channel = new TcpServerChannel(_port);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Lobby),
"Lobby", WellKnownObjectMode.Singleton);
RemotingServices.Marshal((_lobby), "Lobby");
System.Console.WriteLine("Press Any Key");
}
catch (Exception e)
{
System.Console.WriteLine(e);
}
Это отлично работает при запуске на одном компьютере, но выдает следующее сообщение об ошибке при запуске на отдельных машинах:
System.Net.Sockets.SocketException (0x80004005): A socket operation was attempte
d to an unreachable network 169.254.171.86:9932
Exit
Server stack trace:
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint
ipEndPoint)
at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()
at System.Runtime.Remoting.Channels.RemoteConnection.GetSocket()
at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortA
ndSid, Boolean openNew)
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWit
hRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage
(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITranspor
tHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMess
age(IMessage msg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage req
Msg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgDa
ta, Int32 type)
at JackOfTrades.Common.Table.GetTableData(Boolean full)
Глядя на верхней части, это IP-адрес, который я не распознаю, он ни в сети, ни в IP-маршрутизаторе.
Любые мысли о том, что не так? Помощь будет принята с благодарностью!
IP-: '169.254.171.86' выглядит как окна IP-адрес автоконфигурации, который обычно возникает в результате сетевого адаптера (например, вторичный адаптер), что ISN подключен к сети. Есть ли где-нибудь в коде, где вы пытаетесь обнаружить IP-адрес локального компьютера и, возможно, не являетесь конкретным в отношении того, к какому адаптеру вы получаете адрес? – CodingGorilla