我正在从远程服务 (.NET Remoting
) 返回 Streams
。但是 Streams
也是一次性的,我们都知道这是要被处理的。
我可以在消费完这些后在客户端调用 Dispose
。但是,我想知道当我从远程对象返回 Stream
时到底发生了什么。
特别是:
- 我是否应该更好地将所有内容读入
byte[]
并返回它而不是Stream
? - 或者 .NET 远程处理是否在幕后为我做这件事?
- 如果不是,返回
Stream
与返回byte[]
有何不同?最后,.NET Remoting
必须以某种方式序列化数据吗? - 在客户端调用
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。那是一种特殊的。这是一个代理。
- 您可以在 .NET 远程处理中同时使用两者
- 不,这是另一种类型 通过生成的代理 - 寻找继承自 MarshalByRefObject
- http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx
- 是的,代理类有点神奇
关于c# - 当您通过 .NET Remoting 从远程对象返回 Stream 时到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936693/