9

我正在Streams从远程服务 ( .NET Remoting) 返回。但Streams也是一次性用品,我们都知道是要处理掉的。

Dispose一旦我吃完这些,我就可以打电话给客户端。但是,我想知道当我Stream从远程对象返回 a 时到底发生了什么。

尤其:

  1. 我应该更好地将所有内容读入 abyte[]并返回它而不是 aStream吗?
  2. 还是 .NET 远程处理在幕后为我做这件事?
  3. 如果不是,返回 aStream与返回 a 有何不同byte[]?最后,.NET Remoting无论如何都必须以某种方式序列化数据?
  4. Dispose在客户端调用是否有任何影响?客户端的对象和服务器端的对象之间有什么神奇的联系吗?我认为一旦它在幕后被反序列化,调用Dispose()客户端就没有意义了,还是存在?

我在这里回答 Mike Bild 是因为我也想稍微改进一下这个问题

好的,所以与服务器对话的流(至少对我而言)是出乎意料的。

要使用远程对象,必须执行以下操作:

public static class ServiceFactory <T>
{   
    public static T CreateProxy()
    {
        Type interfaceType = typeof(T);

        string uri = ApplicationServer.ServerURL + interfaceType.FullName;

        return (T)Activator.GetObject(interfaceType, uri);
    }
}

因此,您明确地在某个 URI 上获取特定的远程对象以进行使用。当该远程对象上的方法返回一个继承自 MarshallByRefObject 的对象时,这意味着它会自动与远程端的对象关联吗?好的,使用我自己构建的测试对象应该很容易重现。所以这也意味着我应该在客户端调用 Dispose 并将它代理回服务器端的对象?

4

1 回答 1

3

Stream 是 MarshalByRefObject。那是一种特殊的。这是一个代理。

  1. 您可以在 .NET 远程处理中使用两者
  2. 不,它是生成代理的另一种类型 - 查找从 MarshalByRefObject 的继承
  3. http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx
  4. 是的,代理类有点神奇
于 2012-10-17T18:27:54.270 回答