我有一个客户端应用程序需要通过VPN访问其服务器。如果.NET Remoting调用在服务器和客户端之间传递可序列化对象,那么一切正常。但是,客户端应用程序还会进行传递MarshalByRefObject参数的远程调用,这会失败,因为底层TCP连接无法将连接返回给客户端。
不幸的是,我无法控制企业VPN设置,我不熟悉VPN的工作原理。我测试了所有防火墙关闭,但不知何故合作VPN网络不允许内部网络连接到外部网络(客户端机器)。我认为出于安全原因阻止内部网络连接到外部源是有意义的。有问题的VPN客户端是Cisco AnyConnect安全移动客户端。
我的问题是:
使用MarshalByRefObject时,这是.NET远程处理的限制吗?
如果我切换到WCF,.NET TCP绑定双工连接是否有效?
如果我可以向IT部门推荐一些东西,我该告诉他们如何配置他们的VPN(如果可能的话)?
通过VPN编写客户端 - 服务器应用程序时,建议的做法是什么?
当.NET远程处理尝试通过失败编组回客户端时,这是一个堆栈跟踪: 注意:10.8.26.34是我的客户端IP地址,8080是注册的.NET Remoting TCP通道。 ME.Streets.Service.Interface.LoadScheduleHelper是从MarshalByRefObject派生的类,它具有属性调用ScheduleKey,需要为客户端编组数据。
异常 System.Net.Sockets.SocketException(0x80004005):连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应10.8.26.34:8080 服务器堆栈跟踪: 在System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress) 在System.Net.Sockets.Socket.Connect(EndPoint remoteEP) 在System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint ipEndPoint) 在System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket() 在System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid,Boolean openNew) 在System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg,ITransportHeaders requestHeaders,Stream requestStream) 在System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage消息,ITransportHeaders requestHeaders,Stream requestStream,ITransportHeaders& responseHeaders,Stream& responseStream) 在System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg) 重新抛出异常 在[0]: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type) 在ME.Streets.Service.Interface.LoadScheduleHelper.get_ScheduleKey() 位于c:\ dev \ Streets \ Main \ Streets \ ME.Streets.Service.Provider \ Remoting \ ServiceEndPoints \ ServiceEndPoint.sch_Schedule中的ME.Streets.Service.Provider.Remoting.ServiceEndPoints.ServiceEndPoint.LoadScheduleByPrimaryKeyInChunkWorker(LoadScheduleHelper loadScheduleHelper,Boolean loadFromDev) .cs:634行 ...