我跑進一個遠程異常:遠程處理和丟失的信道接收器
「這個遠程代理不具有信道接收器,這意味着在服務器具有被監聽沒有註冊的服務器信道,或該應用程序沒有合適的客戶端的信道與服務器交談。「
原因是最好的解釋this blog entry我發現:
第二種情況是比較模糊的。這個 發生在客戶端向服務器發出呼叫 ,服務器返回 對象引用,然後客戶端 在服務器上的引用對象 上發起呼叫。如果引用的 對象位於 的輔助AppDomain上,則服務器上述例外情況可能會引發 。如果發生問題 是因爲通道註冊僅適用於AppDomain,其中 RegisterChannel被調用,012xx通道已被註冊到 輔助AppDomain中。對象 引用返回給客戶端 指向的對象在二次 的AppDomain,而不是它的代理在 主應用程序域,並且因此存在在客戶機和 次級的AppDomain之間沒有 信道有一個使 呼叫可以通過。解決方案:在 的輔助AppDomain中註冊一個 通道,該參考對象存在。
這符合我的情況,因爲我有一個將插件加載到單獨的應用程序域中的服務。對象實例(由所有程序集引用的程序集中定義的接口的實現)在輔助應用程序域中創建,並由服務(跨應用程序域,因此該服務具有代理引用)進行引用。該服務然後將這些代理引用返回給應用程序。在應用程序和服務之間有註冊的通道,但插件和應用程序之間沒有任何通道。
我認爲代理將足以跨越應用程序邊界。我真的必須在插件和應用程序之間創建渠道嗎?這看起來並不正確,所以我必須錯過一些東西。