mi sono imbattuto in un eccezione Remoting:Remoting e canale mancante affonda
"Questo proxy comunicazione remota non ha sink di canale che significa che sia il server non ha canali server registrato in ascolto, o questa applicazione non ha alcun canale client adatto per parlare con il server. "
La causa è meglio spiegato da this blog entry ho trovato:
Il secondo caso è più oscura. Questo si verifica quando il client effettua una chiamata al server, il server restituisce un riferimento oggetto e il client quindi effettua una chiamata sull'oggetto di riferimento sul server. Se l'oggetto di riferimento si trova in un AppDomain secondario su il server, l'eccezione sopra può essere generata da . Se il problema si verifica è perché la registrazione del canale solo si applica all'AppDomain in cui viene chiamato RegisterChannel e non è stato registrato alcun canale nell'AppDomain secondario secondario. Il riferimento all'oggetto restituito al client punti all'oggetto in AppDomain secondario, non al suo proxy nel AppDomain primario , e quindi non c'è canale tra il client e il dominio di applicazione secondario attraverso il quale la chiamata può passaggio. Soluzione: registrare un canale nell'AppDomain secondario in in cui è presente l'oggetto di riferimento.
Questo corrisponde al mio scenario poiché ho un servizio che carica i plugin in appdomain separati. Le istanze dell'oggetto (implementazioni di un'interfaccia definita in un assembly a cui fanno riferimento tutti gli assembly) vengono create negli appdomain secondari e fanno riferimento al servizio (cross-appdomain, quindi il servizio ha riferimenti proxy). Il servizio restituisce quindi questi riferimenti proxy a un'applicazione. Esistono canali registrati tra l'applicazione e il servizio, ma nulla tra il plugin e l'applicazione.
Ho pensato che un proxy sarebbe stato sufficiente per superare i limiti dell'appodominio. Devo davvero creare canali tra i plugin e l'applicazione? Non sembra affatto giusto, quindi mi mancherà qualcosa.