c# - 当您通过 .NET Remoting 从远程对象返回 Stream 时到底发生了什么

标签 c# .net remoting dispose .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. 是的,代理类有点神奇

关于c# - 当您通过 .NET Remoting 从远程对象返回 Stream 时到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936693/

相关文章:

mysql - 远程连接 Mysql Ubuntu

c# - C# 中的测试驱动远程处理 - 我需要单独的服务器 AppDomain 吗?

c# - if 语句匹配多个值

c# - C#中的指针三角形

c# - 我在将此 SAMLResponse 读入 SecurityToken 对象时遇到问题

.net - 是否可以将 System.Transactions.TransactionScope 与 SqlBulkCopy 一起使用?

.net - 哪些文件名占位符可用于 Serilog?

c# - AppDomain 间通信问题

c# - 如何检测 Visual Studio 中未处理的异常?

C# LinearGradientBrush。如何改变两种颜色的混合点?