我刚刚在 MSDN 网站 ( http://msdn.microsoft.com/en-us/library/aa730857(v=vs ) 上阅读了 Ingo Rammer 的文章“从 .NET Remoting 到 Windows Communication Foundation (WCF)” .80).aspx )。
不过,我仍然有一个疑问,我希望有人能帮助我。
在会话“第 3 步 - 使用会话而不是客户端激活的对象”中,它准确地涵盖了我们在公司中使用的远程处理,他展示了如何获取和使用对另一端实例化的远程对象的引用(服务器端)。但是,在我们的例子中,当客户端请求对它们的引用时,我们不会在服务器端实例化这些对象。对象已经存在于服务器端(它们之前已实例化),我只想获取对这些已经活动对象的引用。
我们今天如何使用远程处理来做到这一点?我们有一个“对象服务器”对象(派生自 MarshalByRefObject)。该对象可通过 URL “tcp://localhost:9002/ObjectServerInstance”获得。远程应用程序可以使用 Activator.GetObject 获取对它的引用。此对象服务器对象实现了一个接口 IObjectServer,它声明了一个具有以下签名的方法: Object GetObject (string objTag);
客户端应用程序使用对这个对象服务器对象的引用来调用它的 GetObject 方法,传递一个对象标记字符串作为参数(例如:“组合”)。然后,此方法返回对 Portfolio 对象的引用,该对象先前已使用此标签“Portfolio”在对象服务器对象之前发布自身。Portfolio 对象当然也派生自 MarshalByRefObject。并且它不是仅在远程客户端请求对其进行引用时才实例化的,它已经在服务器上实例化了。
当然,这可以做不同的事情。每个可以远程访问的对象都可以通过编程方式使用自己的 objectUri 在服务器端的 Remoting 层之前发布自己(例如:“tcp://localhost:9002/MyObjectInstance”),在客户端我们可以使用 Activator .GetObject 直接获取每个对象的引用。但这与我提出的观点无关。无论如何,当服务器对象在 Remoting 层之前发布它们自己时,它们就已经存在了。
我够清楚了吗?您是否看到使用 WCF 执行此操作的方法?