I in eine remoting Ausnahme lief:Remoting- und fehlendes Kanalsenken
„Dieser remoting Proxy hat keinen Kanalkörper, was bedeutet, entweder der Server keine registrierten Serverkanäle hat, die hören oder diese Anwendung hat keinen geeigneten Client-Kanal mit dem Server sprechen. "
Die Ursache ist am besten erklärt this blog entry ich gefunden:
Der zweite Fall Unbekannter ist. Dieses tritt auf, wo der Client einen -Aufruf an den Server aufruft, der Server eine Objektreferenz zurückgibt und der Client dann einen Aufruf für das referenzierte Objekt auf dem Server ausführt. Wenn das referenzierte Objekt in einer sekundären AppDomain auf Server ist, kann die obige Ausnahme ausgelöst werden. Wenn das Problem auftritt, ist es ist, weil Kanalregistrierung nur gilt für die AppDomain in dem RegisterChannel aufgerufen wird und kein Kanal in der sekundären AppDomain registriert wurde. Das Objekt Referenz zurückgegeben an den Client Punkte auf das Objekt in dem sekundär AppDomain, nicht in seine Proxy im primären AppDomain, und so gibt es keinen Kanal zwischen dem Client und dem sekundären AppDomain über die der Anruf kann bestehen. Lösung: Registrieren Sie einen -Kanal in der sekundären AppDomain in , in dem das referenzierte Objekt vorhanden ist.
Dies passt zu meinem Szenario, da ich einen Dienst habe, der Plugins in separate Appdomains lädt. Objektinstanzen (Implementierungen einer Schnittstelle, die in einer Assembly definiert ist, auf die alle Assemblys verweisen) werden in den sekundären Appdomains erstellt und vom Dienst referenziert (Cross-App-Domäne, sodass der Service Proxyverweise hat). Der Dienst gibt dann diese Proxyverweise an eine Anwendung zurück. Es gibt registrierte Kanäle zwischen der Anwendung und dem Dienst, aber nichts zwischen dem Plugin und der Anwendung.
Ich dachte, dass ein Proxy ausreichen würde, um die appdomain Grenzen zu überschreiten. Muss ich wirklich Kanäle zwischen den Plugins und der Anwendung erstellen? Das scheint überhaupt nicht richtig zu sein, also muss ich etwas verpassen.