Come funzionano la riflessione e il remoting internamente?
-
05-07-2019 - |
Domanda
Sono curioso di sapere come funzionano Reflection e Remoting in .net internamente. Ho anche sentito che .net può usare il telecomando per comunicare con applicazioni scritte in altre lingue (come Java). Come funziona?
Questa è probabilmente una grande domanda, quindi una risposta che tocca brevemente ogni domanda è ragionevole.
Soluzione
Il remoting funziona intercettando le chiamate a determinati oggetti ( MarshalByRefObject
) ed eseguendo invece una chiamata RPC; essenzialmente l'oggetto al chiamante è solo un proxy leggero per l'oggetto reale nell'AppDomain / machine / etc originario. Gli argomenti e i risultati vengono trasferiti (di nuovo, prendendo in considerazione MarshalByRefObject
- altrimenti utilizzando BinaryFormatter
per serializzare i valori).
Reflection è integrato nel runtime principale e fornisce l'accesso alle definizioni dei tipi sottostanti. Ciò è probabilmente in parte dovuto al fatto che l'IL sotto i linguaggi .NET è piuttosto espressivo in termini di codice originale.
Tuttavia, non sono personalmente a conoscenza di alcun modo di parlare tramite telecomando a Java. Potrebbe essere possibile, ma i formati utilizzati sono di proprietà (AFAIK). In generale, è più probabile che tali chiamate assumano la forma di chiamate SOA, come servizi Web (su SOAP o POX) o altri standard aperti come messaggi serializzati con JSON o "buffer di protocollo"; (un formato di filo open source con varianti sia per C # che per java).