Marshal .NET Type跨网络

时间:2009-09-02 01:54:58

标签: c# .net class types

在Java中,您可以执行以下操作:

byte[] code = ReadFromClassFile("SomethingSomething.class");
SendAcrossNetwork(code);

另一方面:

byte[] code = ReadFromNetwork();
Class marshalledCode = CustomClassLoader.defineClass(code, 0, code.length);
Object obj = marshalledCode.newInstance();  //Hey look, I've marshalled a class over the network!

以上遗漏了90%的细节,但你应该明白这一点。

我的问题是,什么是.NET等价物?
我可以在Remoting上找到各种各样的参考资料,但这类课程没有任何内容。


我有点把自己用byte []作为最低级别的传输级别(基本上是套接字)。

要明确的是,所涉及的类型从一台机器开始,需要被编组到其他机器上,这些机器除了在公共组件中定义的公共接口之外什么都没有。正在封送的类型在接收机器上不存在。

在这种情况下,远程调用是不可接受的,我需要对象仅从创建它们的进程接收方法调用。网络流量受到严格控制;我基本上是根据需要在网络上发送本地行为,而不是分配计算。

3 个答案:

答案 0 :(得分:1)

查看Serialization以及RemotingSockets进行传输。

序列化是将正确标记的对象转换为二进制或XML(或存在格式化程序的其他格式)格式的过程。

远程处理和套接字用于类似的目的,但是在套接字是非常低级的数据传输原语的情况下,作为系统的远程处理是相当高级的 - 在完全控制(套接字)和易用性(远程处理)之间进行权衡。 / p> 编辑:啊,我明白了。然后,Remoting就是你想要使用的东西。如果您要使用的类型都来自同一个基础,并且客户端和服务器都知道基础,那么Remoting将为您提供剩下的工作。

要在服务器上实例化客户端上的类型,请参阅此页面及其参考资料 - http://msdn.microsoft.com/en-us/library/cbzcxy2s(VS.71).aspx

答案 1 :(得分:1)

看看Reflection.Emit。它允许您动态生成类型和程序集。您必须找到一种方法来序列化类型定义,将其发送,然后在第二台机器上生成新的类型/程序集。

对不起,如果这有点模糊,但希望它足以让你开始。

答案 2 :(得分:0)

从您可以获得containing assembly的类型,程序集可以是serialized,或者您可以获取其underlying bits,然后通过网络发送,接收方可以{{3}程序集并实例化该类型。这是可能的,但不是开箱即用,即。你必须写管道。您还需要处理materialize和安全隐患。