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

Chr*_*oph 9 .net c# remoting dispose .net-remoting

我正Streams从远程服务返回(.NET Remoting).但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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 3

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

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