天天看點

OPC DCOM配置的一點經驗

最近做了一個小項目,功能很簡單,就是編寫一個OPC用戶端軟體實作從OPC伺服器上擷取資料然後轉存到DB中。項目雖小但是值得考慮的地方仍不少,所謂麻雀雖小,五髒俱全。

1、DCOM正常配置

網上關于DCOM的配置五花八門,各種各樣。當時剛開始配置的時候也是各種嘗試,雖然能調通,但卻不知道為什麼通的。總結起來,主要是分為了兩點:首先,要保證有權限通路對方,然後就是能夠啟動和激活com。

權限通路經常出現的連接配接失敗等錯誤。這時候應該check一下:

a.對方防火牆是否關閉或者将相應的程式和端口加入到例外。

b.檢查“控制台”-“管理工具”-“本地安全政策”-“網絡通路:本地賬戶的共享和安全模式”設為“經典-本地使用者以自己的身份驗證”。

    c.dcom的預設配置中沒有加入相應使用者的權限。即,服務端的通路限制中要存在用戶端發起通路的賬戶。一般添加everyone賬戶,這也可以讓所有的賬戶都有權限,這也雖然友善但是不安全,對于安全性要求高的還要設定統一賬戶,統一密碼。

對于啟動和激活權限,簡單的設定也是全加入everyone賬戶。(這裡要說明一點,有些資料說不能在“限制”中添加everyone賬戶否則會導緻無妨通路等問題,本人試了試發現并沒有像說的那樣,還有的資料說要将Interactive,system,network,administrator賬戶一并加入,這裡我也沒有加入,但依然可以通路。具體原因沒有探索。。。)如果是使用opc用戶端枚舉DCOM端的com名稱,則需要配置opcenum時加入ANONYMOUS LOGO賬戶,然而,這隻是用于枚舉com名稱,并不會影響通路。就是說如果事先知道com名稱則不需要配置opcenum,直接使用com名稱來通路應該也是可以的。在配置具體的opc服務時,我覺得基本不用配置,使用預設的配置一般都是可以的,如果不行再按照opcenum的配置來配就可以。如果實在不知道怎麼配,那就簡單的給所有可配的把上述幾種提到的轉戶一股腦的全加進去,也未嘗不可。

2、失誤配置

不能不說,我這人手賤。在嘗試了各種配置不果時,我會嘗試一些奇葩的配置。而這也讓我嘗到不少的苦頭。          a.在參照網上的配置,将“控制台”-“管理工具”-“本地安全政策”-“DCOM-安全描述符。。。”的“沒有定義”修改了一下,結果怎麼也無法改回去了。而且還導緻了“組建服務-“我的電腦”-“COM安全”-“編輯限制”變為灰色的,直接無妨編輯了。經過各種查找,删除系統資料庫“HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DCOM”就可以了。          b.另一個失誤是将“組建服務-“我的電腦”-“COM安全”中的everyone賬戶給删除了,導緻這個“COM安全”都程式設計灰色,無法編輯。依然是通過删除系統資料庫項“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole”下的限制和預設項,不過在删除前,先導出儲存一下系統資料庫。防止誤删。         c.還有一個失誤是不小心删除了OpcEnum “安全”裡的某個選項的賬戶,導緻整個OpcEnum都無法配置。無論重重新regserver,還是重新安裝opcenum.exe,都無濟于事。最後,依然是通過修改萬能的系統資料庫,“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{13486D44-4821-11D2-A494-3CB306C10000}”額,删除那個來着,忘記了,好像也是個限制,如果沒有權限,右鍵添加相應使用者的權限。    總之,以上失誤導緻的問題,除非重裝系統,否則,即便是重新按照DCOM等也不能解決問題,任何配置都可以通過系統資料庫來修改。也不要是以就将這個系統資料庫導出備份,因為當你再導入的時候,會有很多項提示沒有權限,而你也不知道是那個地方有問題,按個添權重限不現實。是以,需要修改那個項,就導出那個項好了。

3、互動式使用者還是啟動使用者

這個問題,一開始一直不明白,隻是聽别人說選這互動式使用者就行了。直到有一天,發現“互動式使用者”無法啟動COM,“啟動使用者”卻可以啟動COM,我才研究了一下這兩個使用者的差別。 互動式使用者:何謂互動,就是交換,互換。當你通過DCOM通路對方的時候,采用互動式使用者會将你的通路賬戶“轉換”為對方目前登入的賬戶。所有的操作都是以對方目前登入使用者的權限來操作的。當有多個使用者通路的時候,都是以對方目前的登入使用者來操作。如果,之前已經有人啟動了服務,則使用之,不會再啟動一個服務。是多對一個的關系。   啟動使用者:啟動使用者沒有轉換的過程,你是以什麼身份通路還是按照什麼身份通路,隻要你有這個權限。對方系統會給每一個登入到其系統的賬戶單獨的開辟一份空間來啟動相應的服務。也就是說,當有多個使用者通路的時候,會導緻多個記憶體空間,這樣可能會導緻記憶體的浪費。 值得一說到 是,我當初通路的OPC伺服器是個工程機,而且裝在機房,我隻能通過遠端連接配接來配置,當時選擇的是互動式使用者,配置完以後我通過遠端連接配接重新開機了電腦,然後在遠端連接配接登入進去,始終都無法啟動com服務,提示說“因為配置辨別不正确,無妨啟動服務。。”,反反複複排除都無法解決,然而,選擇啟動使用者就可以。最後發現我是使用遠端連接配接登入的,采用互動式使用者會轉換為遠端連接配接的使用者,而這個使用者我又沒有配置通路和啟動權限,是以一直無妨連接配接,最後還是跑到機房把電腦重新開機,然後使用管理者賬戶登入進去,然後再遠端連接配接,這樣就可以了。 萬惡的DCOM,萬惡的OPC。

繼續閱讀