我們有一個完全在.NET 4.0(C#)中開發的三層應用程序。作爲企業應用服務器,我們使用COM + 1.5(我知道這有點遺憾......)。在C#中爲.NET 4.0開發了一個服務器部分和一個客戶端部分。在沒有代理安裝的情況下調用COM +中的遠程.NET DLL
服務器部分公開服務繼承ServicedComponent類並返回實現「Serializable」屬性的對象。客戶端通過組件的COM +導出代理調用遠程類。我們通過ClickOnce分發客戶端應用程序,並且必須使用管理員權限將COM +生成的代理安裝到每臺客戶端計算機上。這是不好的一點。
因此,我們正試圖評估其他技術,使我們能夠消除這種代理安裝,但它不怎麼清楚如何做到這一點。我們希望找到一種低影響的方式,使我們能夠使用相同的COM +部分,並以某種方式將Proxy包括在客戶端代碼中。
我們試圖在客戶端部分使用這樣的代碼,但仍需要COM註冊。
Type comObjectType = Type.GetTypeFromProgID("SumNameSpace.SumClass", "servercomplus", true);
SumInterface comObject = Activator.CreateInstance(comObjectType) as SumInterface;
我們認爲使用在客戶端部分接口,而不是類將有工作,但我們有例外:
Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
如果沒有正確的信息應該發生這種錯誤關於Windows註冊表中的界面,但我們不知道...
任何想法?
非常感謝
您是否檢查過潛在的32/64位問題? –
我已經嘗試了32位Windows VISTA,並有同樣的錯誤! tnx – robob
您可以使用免註冊的COM:http://msdn.microsoft.com/en-us/library/ms973913.aspx? –