我很想知道.net 中的反射和远程处理如何在内部工作。我还听说 .net 可以使用远程处理与用其他语言(如 Java)编写的应用程序进行通信。这是如何运作的?
这可能是一个很大的问题,因此简要涉及每个问题的答案是合理的。
我很想知道.net 中的反射和远程处理如何在内部工作。我还听说 .net 可以使用远程处理与用其他语言(如 Java)编写的应用程序进行通信。这是如何运作的?
这可能是一个很大的问题,因此简要涉及每个问题的答案是合理的。
远程处理通过拦截对某些对象的调用 ( MarshalByRefObject
) 来工作,并改为执行 RPC 调用;本质上,调用者处的对象只是原始 AppDomain/machine/etc 处真实对象的轻量级代理。参数和结果被传输(再次考虑MarshalByRefObject
到 - 否则通过使用BinaryFormatter
来序列化值)。
反射深入核心运行时,并提供对底层类型定义的访问。这可能部分是因为 .NET 语言下的 IL 在原始代码方面非常具有表现力。
但是,我个人并不知道通过远程处理到 java 的任何方式。这可能是可能的,但使用的格式是(AFAIK)专有的。通常,此类调用更可能采用 SOA 调用的形式,例如 Web 服务(在 SOAP 或 POX 上),或其他开放标准,例如使用 JSON 或“协议缓冲区”(一种开源有线格式)序列化的消息带有 C# 和 java 的变体)。