2011-11-02 98 views
1

同樣的設置可以在Windows 7/64位的和Windows Server 2008/64位的:的DataSnap/DCOM的Windows Web服務器2008 R2

  • DataSnap服務器應用程序位於安裝網絡驅動器上
  • 的GUID顯示在DCOMCNFG
  • 的SocketServer和DCOM服務正在運行
tregsvr <drive>:\path\to\server.exe(如管理員)註冊

客戶端因錯誤消息「Class not registered」而失敗

如果我將服務器應用程序移動到本地目錄並重復tregsvr註冊,則客戶端可以正常連接。

我還能檢查什麼?

+0

**小心**套接字服務器:1)一切都在scktsrv.exe服務用戶的安全上下文中運行(不要將其作爲本地系統運行!)2)它不能正確支持64位整數。它會覆蓋內存並返回錯誤的結果。特別是在局域網中使用普通的DCOM,並且由於防火牆等原因不需要通過單個TCP/IP端口進行通信。 – 2011-11-02 13:23:46

+0

@ldsandon它是一個遺留系統,不能很快被替換。當服務器被引入時,Socket服務器曾被廣告作爲一種訪問MIDAS(現在的Datasnap)服務器的好方法,並且我們使用它。現在它似乎是像BDE :) – mjn

+0

如果可以的話,擺脫DCOM。這是一個不推薦的技術,Windows 7和2008 Server不喜歡它。您需要在PC上強制執行SMB 1協議,即使如此,我們遇到了很多問題。查看http://stackoverflow.com/questions/7647289/delphi-multiple-remote-com-objects/7661651#7661651關於我如何用HTTP服務替換它,一次爲幾個Delphi 5應用程序。 –

回答

2

客戶端是否被允許連接到網絡驅動器?由於客戶端實際上正在啓動服務器啓動,因此它應該能夠讀取該網絡驅動器(這正是您所看到的,因爲如果服務器位於本地驅動器上,它工作正常)...

+0

IIUC客戶端首先連接到Borland套接字服務器,然後啓動DCOM服務器 - 所以我發現Socketservice帳戶存在問題(它不應該是SYSTEM,而是可以訪問網絡資源的用戶) – mjn

+0

編號不需要從客戶端訪問服務器exe文件。它是服務器上的DCOM,它接受來自客戶端的請求以實例化執行它的服務器。沒有必要使用共享驅動器,這只是一個安全漏洞。這樣,您最終只需將客戶端上的服務器作爲存儲在遠程驅動器上的本地應用程序運行即可,所有東西都在客戶端上運行,而不會通過網絡進行DCOM調用。 – 2011-11-02 13:21:35

0

解決:

  • tregsvr的UNC路徑DataSnap服務器的運行的SocketServer作爲SYSTEM帳戶是精細的網絡位置(而不是安裝的網絡驅動器)
  • ,不需要額外的權限所需

從服務器註銷後,t P

+0

這只是因爲註冊服務器實際上註冊了類型庫。您只需註冊服務器類型庫,就不需要從客戶端訪問服務器.exe。這就是RPC和DCOM的全部內容。 無論如何,以SYSTEM的身份運行意味着服務器中的任何缺陷都會使其擁有最高權限的帳戶。祝你好運。 – 2011-11-02 13:27:21

1
  1. 服務器不得在任何共享網絡驅動器
  2. :他的DataSnap客戶端仍然愉快地

    其他/舊服務器正在運行的SocketServer與必要的權限的應用程序的服務器連接

  3. 您必須在客戶端註冊服務器類型庫,否則客戶端的DCOM將無法理解要實例化的類以及如何在網絡中調用它的調用。它是DCOM,負責要求服務器實例化服務器應用程序。
  4. 在DCOM連接中,您必須告知服務器在哪裏(IP或主機名)。
  5. DCOM必須正確配置:使用Dcomcnfg.exe配置哪些用戶/組可以實例化和調用服務器

如果你使用它實際上是作爲代理套接字服務器。它是代表客戶端進行DCOM調用的套接字服務器,但仍然將調用封裝在發送到套接字服務器的數據包中。

+0

我們在客戶端沒有TDCOMConnection組件,只有一個TSocketConnection - 如果我理解正確,Socketserver不是一個簡單的DCOM代理(它與真實的DCOM服務器具有相同的API),而是某種隧道技術。 – mjn

+0

它不是隧道,因爲它實際上是執行DCOM調用的套接字服務器(丟失了整個DCOM安全實現)。客戶身份已丟失。無論如何,客戶仍然需要了解DCOM接口,它的類型庫必須是註冊客戶端,特別是如果應用程序使用早期綁定。通過IDispatch後期綁定應該可以工作,但類型庫應該加快方法綁定。請參閱http://docwiki.embarcadero.com/RADStudio/en/Calling_Server_Interfaces – 2011-11-02 20:01:41

+0

我們從不必在客戶端(無論是內部還是外部客戶端計算機)都註冊庫。用戶只需啓動客戶端應用程序,並且 - 鑑於端口211在防火牆中處於打開狀態 - 它可以工作大約十年(自MIDAS 1起)。我想這是遲到的約束。 – mjn

相關問題