C# 如何使用.NET远程处理处理IP地址重新路由

C# 如何使用.NET远程处理处理IP地址重新路由,c#,.net-remoting,C#,.net Remoting,我在网络中有一个进程,它希望与另一个网络上的服务对话。所以我有两台电脑: Client Server 172.X.X.X reroute-> 172.X.X.X to 10.0.1.X 通过这种设置,我可以使用172.X.X.X ip地址调用服务器,它映射到10.0.1.X地址,并且可以正常工作。但是,当我尝试使用.NET远程处理和通信时,出现了一个异常: System.Net.Sockets.SocketException: A

我在网络中有一个进程,它希望与另一个网络上的服务对话。所以我有两台电脑:

Client                            Server
172.X.X.X  reroute-> 172.X.X.X to 10.0.1.X
通过这种设置,我可以使用172.X.X.X ip地址调用服务器,它映射到10.0.1.X地址,并且可以正常工作。但是,当我尝试使用.NET远程处理和通信时,出现了一个异常:

System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.0.1.240:8196

Server stack trace: 
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress 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 machinePortAndSid, Boolean openNew)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Aloha.Automation.IBackOfHouseFileServer.get_SecurityKey()
   at Aloha.Automation.Presentation.ViewModel.TerminalViewModel.RefreshSecurityKeyFromTerminal() in c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\TerminalViewModel.cs:line 167
   at Aloha.Automation.Presentation.ViewModel.TerminalViewModel.Refresh() in c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\TerminalViewModel.cs:line 225
   at Aloha.Automation.Presentation.ViewModel.TerminalViewModel.LabConnectorViewModelOnPropertyChanged(Object sender, PropertyChangedEventArgs args) in c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\TerminalViewModel.cs:line 154
   at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
   at Caliburn.Core.PropertyChangedBase.RaisePropertyChangedEventImmediately(String propertyName) in c:\Code\caliburn\branches\v1.1\src\Caliburn.Core\PropertyChangedBase.cs:line 49
   at Aloha.Automation.Presentation.ViewModel.ExtendedPresenter.<>c__DisplayClass1.<NotifyOfPropertyChange>b__0() in c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\DetailsViewModel.cs:line 42
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)]]>
System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应10.0.1.240:8196
服务器堆栈跟踪:
位于System.Net.Sockets.Socket.DoConnect(端点端点快照,SocketAddress SocketAddress)
位于System.Net.Sockets.Socket.Connect(端点remoteEP)
在System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(端点ipEndPoint)
在System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()中
在System.Runtime.Remoting.Channels.RemoteConnection.GetSocket()中
at System.Runtime.Remoting.Channels.SocketCache.GetSocket(字符串machinePortAndSid,布尔openNew)
在System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg、ITransportHeaders requestHeaders、Stream requestStream)
在System.Runtime.Remoting.Channel.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg、ITransportHeaders requestHeaders、Stream requestStream、ITransportHeaders和responseHeaders、Stream和responseStream)
在System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)上
在[0]处重试异常:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)
at System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)
在Aloha.Automation.IBackOfHouseFileServer.get_SecurityKey()上
在c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\TerminalViewModel.RefreshSecurityKeyFromTerminal()中的Aloha.Automation.Presentation.ViewModel.TerminalViewModel.RefreshSecurityKeyFromTerminal()中:第167行
在c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation\ViewModel\TerminalViewModel.cs中的Aloha.Automation.Presentation.ViewModel.TerminalViewModel.Refresh()处:第225行
在c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation\ViewModel\TerminalViewModel.LabConnectorViewModelOnPropertyChanged(对象发送方,PropertyChangedEventArgs参数)中的Aloha.Automation.Presentation.TerminalViewModel.LabConnectorViewModelOnPropertyChanged(对象发送方,PropertyChangedEventArgs):第154行
在System.ComponentModel.PropertyChangedEventHandler.Invoke(对象发送方,PropertyChangedEventArgs e)
在c:\Code\Caliburn\branchs\v1.1\src\Caliburn.Core\PropertyChangedBase.cs中的Caliburn.Core.PropertyChangedBase.raisePropertychangedeventimetly(字符串propertyName)处:第49行
在c:\BuildAgent\work\78a60abb233492e7\Source\Aloha.Automation.Presentation.ViewModel.ExtendedPresenter.c_uuuDisplayClass1.b_u0()中的Aloha.Automation.Presentation\ViewModel\DetailsViewModel.cs:第42行
---内部异常堆栈跟踪的结束---
在System.RuntimeMethodHandle.\u InvokeMethodFast(对象目标、对象[]参数、SignatureStruct&sig、MethodAttributes方法属性、RuntimeTypeHandle类型所有者)
位于System.RuntimeMethodHandle.InvokeMethodFast(对象目标、对象[]参数、签名符号、方法属性、方法属性、RuntimeTypeHandle类型所有者)
在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性、布尔skipVisibilityChecks)
位于System.Delegate.DynamicInvokeImpl(对象[]args)
位于System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调、对象参数、布尔isSingleParameter)
位于System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源、委托回调、对象参数、布尔isSingleParameter、委托catchHandler)]]>

我该如何处理这种情况?我需要切换远程处理技术还是使用自己的远程处理技术?

这在.NET中是不可能的。当您遇到ip重新路由问题时,请切换到WCF。

我建议您切换到WCF。当服务器“工作”时,您如何与服务器交谈?通过http?您的网关是否已设置为将所有内容转发到服务器,或仅转发到端口80?@Jaxidian我正在查看WCF@不,它仅在计算机的ip与我从客户端使用的ip匹配时工作。如果我做了重新路由,它就不起作用。这表明是重新路由没有正常工作。切换到WCF是我必须做的。这就是答案,如果你想把它贴出来并获得信用的话。