我在2個遠程服務器上的COM應用程序中安裝了COM + dll。我從其中一臺服務器中導出了非排隊代理,並將其安裝在客戶端計算機上。在運行時在VB6中創建非排隊的遠程COM對象指定服務器
我希望能夠指定COM對象在運行時實例化的遠程服務器 - 代理安裝包含我從中導出代理的計算機的遠程服務器名稱,因此只需在客戶端上創建代理就會始終調用我從中導出的機器,因爲它是代理屬性的一部分。
代理服務器沒有排隊,所以我不能使用調用GetObject
的方法,使用PathName如queue:ComputerName=Server01/new:ComClass.Class
。
對於將始終調用它們從中導出的遠程服務器的非排隊代理,我只使用CreateObject(objectName)
,它將使用代理屬性中的遠程服務器名稱。
經過一番搜索,我找到了一個解決方案(在我的自我回答下面),但有沒有一種更簡單的方法在VB6中做到這一點,而無需使用ole32.dll
函數?
編輯:在測試@ Bob77提出的解決方案的評論中,使用服務器名稱參數調用CreateObject
沒有任何影響。只使用概述的CreateRemoteObject
方法實際上調用指定服務器上的COM組件。
這可能是因爲客戶端調用來自IIS進程,並且遠程服務器的COM +應用程序的用戶身份不同。
爲什麼不直接在「CreateObject」調用的第二個參數中提供服務器名稱?這就是它的原因。 – Bob77
@ Bob77:我相信這是在這裏尋找的答案。考慮到語言的過時程度,查找VB6調用的文檔可能是一個相當大的挑戰。 –
@ Bob77我們使用代理服務器組件,因爲服務器組件必須以特定的用戶身份在COM +應用程序中運行,而代理服務器可以在IIS進程中實例化。我真的不知道我的解決方案是使用IIS用戶身份還是遠程COM +應用程序標識 - 查找有用的VB6文檔是一場噩夢! –