我正在Streams
从远程服务 ( .NET Remoting
) 返回。但Streams
也是一次性用品,我们都知道是要处理掉的。
Dispose
一旦我吃完这些,我就可以打电话给客户端。但是,我想知道当我Stream
从远程对象返回 a 时到底发生了什么。
尤其:
- 我应该更好地将所有内容读入 a
byte[]
并返回它而不是 aStream
吗? - 还是 .NET 远程处理在幕后为我做这件事?
- 如果不是,返回 a
Stream
与返回 a 有何不同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 并将它代理回服务器端的对象?