当客户端和服务器在远程处理中共享相同的接口时,如何为SAO创建代理

时间:2009-06-18 06:15:13

标签: c# .net remoting

我怀疑SAO对象。 例如。我有ITestObj.dll和RemoteObject(注册为SAO)的Interface ITest,它在名为RemoteObject.dll的服务器中实现ITest。现在我的客户端只使用ITestObj.dll并尝试使用Activator方法创建代理对象。根据MSDN- GetObject或new可用于服务器激活。请务必注意,在进行其中任何一个调用时,都不会实例化远程对象。事实上,根本不会产生任何网络呼叫。框架从元数据中获取足够的信息以创建代理,而根本不连接到远程对象。

为什么Activator.GetObject可以创建一个Test实例,并将其作为一种Itest提供给客户端,而不是连接到服务器?

2 个答案:

答案 0 :(得分:0)

在您对对象进行调用之前,代理不会尝试连接到服务器。因此,即使服务器没有运行,您也可以使用Activator.GetObject()来获取对象上代理的引用。

如果在服务器未运行时调用代理对象上的方法,则会出现RemotingException。

答案 1 :(得分:0)

创建客户端透明代理时,不会检查服务器上的有效性。一旦调用一个函数,就会与服务器建立连接,此时服务器会尝试找到实现该接口的服务器对象。如果未找到,则会生成错误。

基本上,在客户端上创建的透明代理使用该接口来确定如何序列化对服务器的调用。

我不确定我是否清楚地解释了这一点,但希望这会有所帮助。