Удаленное взаимодействие работает путем перехвата вызовов к определенным объектам (MarshalByRefObject
) и выполнения вместо этого вызова RPC; по сути, объект в вызывающей стороне является просто облегченным прокси-сервером для объекта real в исходном AppDomain / machine / etc. Аргументы и результаты передаются (опять же, с учетом MarshalByRefObject
, в противном случае с помощью BinaryFormatter
для сериализации значений).
Reflection встроен глубоко во время выполнения ядра и предоставляет доступ к определениям базового типа. Возможно, это отчасти потому, что IL под языками .NET довольно выразителен с точки зрения исходного кода.
Однако я лично не знаю, как говорить через удаленное взаимодействие с Java. Это может быть возможно, но используемые форматы (AFAIK) являются собственностью. В целом, такие вызовы чаще всего принимают форму вызовов SOA, таких как веб-сервисы (на SOAP или POX), или других открытых стандартов, таких как сообщения, сериализованные с помощью JSON, или «буферов протокола» (проводной формат с открытым исходным кодом с вариантами для C # и Java).