Как рефлексия и удаленное взаимодействие работают внутри? - PullRequest
3 голосов
/ 08 марта 2009

Мне любопытно узнать, как Reflection и Remoting в .net работают внутренне. Я также слышал, что .net может использовать удаленное взаимодействие для связи с приложениями, написанными на других языках (таких как Java). Как это работает?

Это, вероятно, большой вопрос, поэтому ответ, который кратко затрагивает каждый вопрос, является разумным.

1 Ответ

3 голосов
/ 08 марта 2009

Удаленное взаимодействие работает путем перехвата вызовов к определенным объектам (MarshalByRefObject) и выполнения вместо этого вызова RPC; по сути, объект в вызывающей стороне является просто облегченным прокси-сервером для объекта real в исходном AppDomain / machine / etc. Аргументы и результаты передаются (опять же, с учетом MarshalByRefObject, в противном случае с помощью BinaryFormatter для сериализации значений).

Reflection встроен глубоко во время выполнения ядра и предоставляет доступ к определениям базового типа. Возможно, это отчасти потому, что IL под языками .NET довольно выразителен с точки зрения исходного кода.

Однако я лично не знаю, как говорить через удаленное взаимодействие с Java. Это может быть возможно, но используемые форматы (AFAIK) являются собственностью. В целом, такие вызовы чаще всего принимают форму вызовов SOA, таких как веб-сервисы (на SOAP или POX), или других открытых стандартов, таких как сообщения, сериализованные с помощью JSON, или «буферов протокола» (проводной формат с открытым исходным кодом с вариантами для C # и Java).

...