2010-03-27 89 views
2

在我的方案中有一個包含類(任務)的客戶端程序集。 該類實現服務器上已知的接口(ITask)。 我試圖發送一個任務對象從客戶端到服務器沒有手動將客戶端的程序集複製到服務器。.Net Remoting:序列化對象和實現

如果我只是序列化任務對象,服務器顯然抱怨缺少的程序集。 然後,我嘗試對typeof(Task).Assembly進行序列化,但無法在服務器上對其進行derserialize。 接下來,我試圖File.ReadAllBytes(typeof(Task).Assembly.Location)並將其保存到服務器上的一個臨時文件,該文件在Assembly.LoadFrom(@「。\ temporary.dll」)上拋出異常。

我爲什麼要這樣做? Java RMI具有一個簡單的功能來請求通過遠程接收但是stil「未知」(該JVM沒有* .class文件)接收的對象的實現。這可以用於只知道包含run()方法的「任務」接口的計算服務器,並根據需要下載此方法的實現。 通過這種方式,服務器不必爲新任務進行更改。 我試圖在.NET中實現這樣的功能。

+1

你爲什麼使用遠程?它已被WCF取代。 – 2010-03-27 01:22:18

回答

1

沒關係,我發現,使用AssemblyResolve事件,並直接從字節數組

AppDomain.CurrentDomain.Load(assemblyData); 

萬一有人加載程序集也有同樣的問題,我工作的方式。