繁体   English   中英

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

[英]What happens under the cover when you return a Stream from a remote object via .NET Remoting

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

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

特别:

  1. 我应该更好地将所有内容读入byte[]并返回而不是Stream吗?
  2. 或者.NET远程控制是否完全适合我?
  3. 如果没有,返回一个Stream与返回一个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并将它代理回服务器端的对象?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM