当您通过.NET Remoting从远程对象返回Stream时,封面下会发生什么

时间:2012-10-17 14:32:09

标签: c# .net remoting dispose .net-remoting

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

一旦我完成消费后,我可以在客户端调用Dispose。但是,当我从远程对象返回Stream时,我想知道封面下究竟发生了什么。

特别是:

  1. 我应该更好地将所有内容都读入byte[]并返回而不是Stream吗?
  2. 或者.NET远程控制是否完全适合我?
  3. 如果没有,返回Stream与返回byte[]的方式有什么不同?最后,.NET Remoting必须以某种方式序列化数据吗?
  4. 在客户端调用Dispose是否有任何影响?客户端对象和服务器端对象之间是否存在神奇的连接?我认为一旦它在封面后反序列化,在客户端调用Dispose()或在那里是没有意义的吗?
  5. 我在这里回答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,并将其代理回服务器端的对象?

1 个答案:

答案 0 :(得分:3)

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

  1. 您可以在.NET远程处理中使用它们
  2. 不,这是另一种类型 在生成的代理上 - 寻找继承 MarshalByRefObject的
  3. http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx
  4. 是的,对代理类
  5. 有点神奇