在公司開發過程中,提出ActiveX 方案,通過公司高層採納,今天在研究和開發ActiveX 引擎;
已通過測試,成功部署.
ActiveX Engine 就是一個ActiveX 的形式,在html 頁內運行;
實現原理為:
主要功能:
Client 瀏覽器只需要安裝2個必須的程式集;它負責從webservices後台調用Assembly 到本地,並裝入;
要求:
Assembly內部是使用UserControl ,那麼它的Owner可以使用 exe 封裝為標準Winform,如果是通過Activex engine 來啟動並執行話,那麼它也可以做一個RIA 應用;
痛點:
1.已解決:通過AppDomain 的方法拆裝每個Assembly,避免影響當前域和Assembly版本衝突問題;但是如何將UserControl 增加到當前域的Controls內是個痛點,不過我解決了;方法比較另類,直接使用非託管api實現的.
2.已解決:遠端assembly的相關程式集,採用智能化的搜尋,打包->壓縮->傳輸到client activex engine 使用.整個過程是透明的。
3.未解決:指令碼互動的時候,方法的參類型的變形,該問題一直未解決;在C#中比如參數為object[] Params.那麼在javascript該如何傳遞呢?(目前採用非常蠢的辦法湊合著)
用例:
Assembly:Test1.dll
class UserControlTest:UserControl {
...
}
HTML:Test.htm
<object classid="......"/>
<script type=text/javascript>core1.LoadAssembly("Test1.dll", "UserControlTest");</script>
core1為ActiveX.Engine 執行個體:它提供裝入方法,和Current UserControl 互動的方法,這部分的實現採用反射.
關於ActiveX.Engine ,是應用於b/s 在一些複雜的,低級的模組實現上的解決辦法,比如:串口通訊/進階圖表...等等.
關於該思路的起源:
http://chinasf.cnblogs.com/archive/2006/06/11/WINCTS.html