對於我們正在開發的項目,我們使用.NET遠程處理在服務器和客戶端之間進行通信。到目前爲止,我們一直在同一臺機器上測試它,並使用本地主機和任意端口號進行測試。但是,當在同一網絡上的兩臺機器之間進行測試時,使用主要組件,但代理對象失敗。兩臺機器之間的.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 2010-11-09 14:33:02