c# - 如何使用 WCF 获取对已实例化的远程对象的引用?

标签 c# wcf migration remoting

我刚刚在 MSDN 网站 (http://msdn.microsoft.com/en-us/library/aa730857(v=vs.80).aspx) 上阅读了 Ingo Rammer 的文章,标题为“从 .NET Remoting 到 Windows Communication Foundation (WCF)”。

不过我还有一个疑惑,希望有人能帮帮我。

在“第 3 步 - 使用 session 而不是客户端激活的对象”这节课中,它完全涵盖了我们在公司中使用远程处理的类型,他展示了如何获取和使用对实例化的远程对象的引用另一端(服务器端)。然而,在我们的例子中,当客户端请求引用它们时,我们不会在服务器端实例化这些对象。这些对象已经存在于服务器端(它们之前已实例化),我只想获取对这些已经激活的对象的引用。

我们今天如何使用 Remoting 来做到这一点?我们有一个“对象服务器”对象(派生自 MarshalByRefObject)。该对象可通过 URL“tcp://localhost:9002/ObjectServerInstance”获得。远程应用程序可以使用 Activator.GetObject 获取对它的引用。此对象服务器对象实现一个接口(interface) IObjectServer,它声明一个具有以下签名的方法: Object GetObject (string objTag);

客户端应用程序使用对此对象服务器对象的引用来调用其 GetObject 方法,将对象标记字符串作为参数(例如:“Portfolio”)传递。然后此方法返回对 Portfolio 对象的引用,该对象先前已使用此标记“Portfolio”在对象服务器对象之前发布了自己。当然,Portfolio 对象也派生自 MarshalByRefObject。而且它不是仅在远程客户端请求引用它时才实例化,它已经在服务器上实例化了。

当然,这可以用不同的方式来完成。每个可能被远程访问的对象都可以通过编程方式使用自己的 objectUri 在服务器端的 Remoting 层之前发布自己(例如:“tcp://localhost:9002/MyObjectInstance”),而在客户端我们可以使用 Activator .GetObject 直接获取每个对象的引用。但这与我提出的观点无关。不管怎样,当服务器对象在远程处理层之前发布它们自己时,它们就已经存在了。

我说得够清楚了吗?您是否看到使用 WCF 执行此操作的方法?

最佳答案

查看您提供的链接中的代码,在我看来您需要修改 IRemoteFactory 接口(interface)的 GetInstanceMethod 实现以返回一个现有的对象, 而不是创建一个新对象。

public interface IRemoteFactory
{
  IMySessionBoundObject GetInstance();
}

public class RemoteFactory : MarshalByRefObject, IRemoteFactory
{
  public IMySessionBoundObject GetInstance()
  {
    // Return an already existing object, instead of a new one.
    return MyAlreadyExistingSessionBoundObject;
  }
}

关于c# - 如何使用 WCF 获取对已实例化的远程对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961031/

相关文章:

c# - 在 UI 上下文中开始的任务

c# - KinectSensor.DepthStream.OpenNextFrame 返回 NULL

wcf - 从WCF处理错误的最佳实践

ios - 核心数据迁移仅在发布版本上失败

git - 将源代码从 git 迁移到 TFVC

c# - 如何在不使用 LINQ 遍历整个列表的情况下查找 C# 列表中的第一个匹配项?

c# - 不传输文件的FileUpload

c# - 什么能比并发集合更好地解决这种多线程场景

wcf - 将大文件传递给 WCF 服务

php - 教义迁移问题