2010-12-17 84 views
1

我使用客户端和服务器之间的远程处理,虽然它的工作原理,我看到一些我不明白的行为。测试远程代理是否有效?

我设置了我的服务器如下:

 BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider(); 
     serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;    
     BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider(); 

     IDictionary props = new Hashtable(); 
     props["name"] = "MarsLogServer.rem"; 
     props["port"] = Properties.Settings.Default.ListeningPort; 
     props["useIpAddress"] = false; 

     server = new LogServer(); 

     chan = new TcpChannel(props, clientProv, serverProv); 
     ChannelServices.RegisterChannel(chan, true);    
     RemotingConfiguration.RegisterWellKnownServiceType(typeof(LogServer), "MarsLogServer.rem", WellKnownObjectMode.Singleton);    

而我的客户端连接如下:

this.logServer = (ILogServer)Activator.GetObject(typeof(ILogServer), connectForm.Url); 
this.logServer.AttachClient(this, connectForm.SessionKey) 

发生了什么事是我甚至不具备的服务器上运行,但我在客户端代理上对AttachClient()的调用成功。我不明白为什么会这样,没有进程在提供的URL上运行托管对象(除非有人在对我玩耍),那为什么它不抛出异常呢?

理想情况下,我希望通话失败,或者我想要某种方式在允许我的客户端继续前测试我的代理是否有效。现在它无法知道连接是否成功。

回答

0

也许你可以使用System.Runtime.Remoting.RemotingServices.IsTransparentProxy(客户端)来测试TransparentProxy/RealProxy链是否已设置?

-Oisin

+0

试过,它返回true。 – Joe 2010-12-17 18:51:41