2010-04-08 3 views
0

J'ai un processus dans un réseau qui veut parler à un service sur un autre réseau. J'ai donc deux ordinateurs:Comment gérer le réacheminement d'adresses IP avec .NET Remoting

Client       Server 
172.X.X.X reroute-> 172.X.X.X to 10.0.1.X 

Avec cette configuration, je peux appeler le serveur avec l'adresse ip 172.X.X.X et cartes à l'adresse 10.0.1.x et parle très bien. Toutefois, lorsque j'essaie d'utiliser .NET Remoting et de communiquer, j'obtiens une exception:

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)]]> 

Comment gérer cette situation? Ai-je besoin de changer de technologie à distance ou de lancer la mienne?

+3

Je vous recommande de passer à WCF. – Jaxidian

+0

Comment parlez-vous au serveur quand il "fonctionne"? via http? Votre passerelle est-elle configurée pour transférer tout le contenu vers le serveur ou simplement par ex. le port 80? – nos

+0

@Jaxidian Je regarde WCF en ce moment. @nos cela ne fonctionne que lorsque l'adresse IP de l'ordinateur correspond à l'adresse IP que j'utilise du client. Si je redirige, ça ne marche pas. –

Répondre

2

Cela n'est pas possible avec .NET. Lorsque vous rencontrez des problèmes de routage IP, passez à WCF.