DCOM的學習和配置

来源:互联网 发布:辐射4原版捏脸数据 编辑:程序博客网 时间:2024/06/07 12:34

DCOM的學習和配置

概述COM:
COM的分類:以VB的來講
        Dll---進程內的COM
        Exe—進程外的COM
        Ocx—控件
一、 DCOM的應用
跨網域的分布式,負載平衡的應用,應用的擴展性及本身有應用程序就是分布式的
二、COM與DCOM的區別和聯系  
COM DCOM
運行的地點 本地执行 网络上的另一台计算机上执行
存在形式 动态连接库 执行程序
通信方式 不用RPC远程调用 使用RPC远程调用
調用方式 同一線程,调用速度快 不同線程,速度慢
安全性 安全性不高 安全全性高
复杂性 配置簡單 配置较复杂


联系:
客户程序不必知道COM的存在形式
有统一的接口调用方式
客户程序甚至不知道COM对象的位置  
三、DOCM的表現方式:LPC   和   RPC


位置的通透性
HRESULT   是DCOM的傳回值
四、COM   與注冊表的關系
服務器端與客戶端要有一個相同的CLSID,客户端不需要知道他是調用本機上還是服務器上的COM,客户端仅仅需要知道组件的CLSID和APPID裡的RemoteServerName   。
微软提供了设置DCOM的工具DCOMCNFG.EXE,用来设置远程服务器,而不用手动修改注册表,我們在下面會介紹它怎麼使用的。
五、使用   Visual   Basic   建立   DCOM   主從架構應用程式例子
建立伺服器
建立新的   Visual   Basic   專案。在   [新增專案]   對話方塊中,選取   [ActiveX   執行檔]   ,然後按一下   [開啟舊檔]   。根據預設值隨即建立   Class1。  
1. 將下面程式碼新增至   Class1   模組中:  
2. Public   Function   ServerTime()   As   String
3.         ServerTime   =   Time
End   Function
4. 在   [專案]   功能表上,按一下   [Project   屬性]   選項,然後選取   [一般]   標籤。  
5. 在   [專案名稱]   欄位中,輸入:   DCOMDemo_Svr   。  
6. 在   [專案描述]   欄位中,輸入:   DCOMDemo_Svr   -   Server   。核取   [執行時無使用者介面]   選項。  

注意   :如果伺服器沒有任何   UI   可以確認伺服器在執行時沒有顯示任何類型的對話方塊,就應該要核取此選項。如果在非「互動使用者」登入的情況下執行伺服器,而出現任何類型的使用者互動,伺服器可能會掛掉。  
7. 選取   [元件]   標籤,然後核取   [遠端伺服器檔案]   選項。  

注意   :核取此選項會讓   Visual   Basic   編譯器產生封裝會使用此伺服器的用戶端應用程式所需的   VBR   與   TLB   檔。這些檔案包含需要加入用戶端電腦上的登錄項目。  
8. 關閉   [專案屬性]   對話方塊。  
9. 在   [檔案]   功能表上,選取   [另存新檔]   ,然後將此專案新增至   c:\DCOMDemo\Server   資料夾。  
10. 在   [檔案]   功能表上,選取   [製成   DCOMDemo_Svr]   ,然後編譯此伺服器。  
11. 在   [專案]   功能表上,選取   [Project   屬性]   選項,然後選取   [元件]   標籤。  
12. 在   [元件]   標籤上,選取   [版本相容元件]   ,選取   [與機器碼相容]   選項,然後讓此專案和您剛才建立的伺服器執行檔   (DCOMDemo_Svr.exe)   的機器碼相容。經由選取此選項,您就是在確認如果重新編譯伺服器,所有的   GUID   都會維持相同。  
建立用戶端  

1. 在   [檔案]   功能表上,選取   [新增專案]   選項,選取   [標準執行檔]   ,然後按一下   [確定]   。根據預設值隨即建立   Form1。  
2. 在   [專案]   功能表上,按一下   [Project   屬性]   選項,然後選取   [一般]   標籤。  
3. 在   [專案名稱]   欄位中,輸入:   DCOMDemo_Cli   。  
4. 在   [專案描述]   欄位中,輸入:   DCOMDemo_Cli   Project   -   Client   。  
5. 在   [專案]   功能表上,選取   [設定引用項目]   。從可用的設定引用項目清單中,選取   [DCOMDemo_Svr   -   Server]   。  
6. 在   Form1   上放置一個指令按鈕,將此按鈕的標題改為   [Run]   。  
7. 將下面程式碼放入此按鈕的按一下   (Click)   事件中:  
8.         Dim   MyObj   As   DCOMDemo_Svr.Class1
9.        
10.         On   Error   GoTo   err1
11.        
12.         Set   MyObj   =   CreateObject( "DCOMDemo_Svr.Class1 ")
13.         MsgBox   "Server   Time= "   &   MyObj.ServerTime   &   "     Client   Time= "   &   Time
14.        
15.         Exit   Sub
16. err1:
17.         MsgBox   "Connection   failed:   Error   "   &   Err.Number   &   "   -   "   &   Err.Description
18. 在   [檔案]   功能表上,選取   [另存新檔]   ,然後將此專案儲存到用戶端資料夾中   c:\DCOMDemo\Client。  
19. 按   F5   鍵,在   IDE   中執行用戶端,試試是否可以運作。  
20. 在   [檔案]   功能表上,選取   [製成   DCOMDemo_Cli]   以編譯此用戶端,然後關閉   Visual   Basic。  
封裝伺服器  
如同平常一樣,使用「封裝暨部署精靈」來封裝要散發的伺服器。遠端用戶端可以使用   DCOM   來起始此伺服器。建立伺服器封裝時,會出現一個對話方塊,詢問您此伺服器是否要作為   Remote   Automation   伺服器,以及如果是作為此用途,您是否要加入支援檔案。請按一下   [否]   按鈕,因為   DCOM   不是   Remote   Automation。Remote   Automation   是舊式技術,已經被   DCOM   取代。  
封裝用戶端  
考慮到伺服器和用戶端不是位於同一部電腦上,在封裝用戶端時您需要採取一些特定步驟。用戶端封裝的變更可確認只安裝了型別程式庫   (.tlb   檔),並加入一些其他的登錄項目,而不是加入伺服器執行檔,用戶端電腦上不需要有伺服器執行檔,因為它不會在那兒執行。  

請使用下面步驟來封裝用戶端:  
1. 啟動「封裝暨部署精靈」,然後選取用戶端的專案。  
2. 按一下   [封裝]   按鈕,在   [封裝類型]   對話方塊中,選取   [標準的安裝程式]   ,然後按一下   [下一步]   。  
3. 在   [封裝資料夾]   對話方塊中,選取要儲存此封裝的資料夾,然後按一下   [下一步]   。在本範例中,應該是   c:\DCOMDemo\Client\Package。  

注意   :您可能會收到一個對話方塊,指出沒有關於伺服器的相依資訊。請按一下   [確定]   ,因為此伺服器沒有任何相依檔案。  

現在應該已經來到   [包含的檔案]   對話方塊中。  
4. 請取消選取伺服器的執行檔,DCOMDemo_Svr.exe,因為您不要散發伺服器的執行檔,接著按一下   [加入]   按鈕。  
5. 在   [檔案類型]   下拉式方塊中選取   [遠端伺服程式檔   (*.vbr)]   。  
6. 請指向儲存伺服器專案的資料夾   (在本範例中是   c:\DCOMDemo\Server),並選取相關的   VBR   檔,DCOMDemo_Svr.VBR。按一下   [開啟舊檔]   ,   [新增檔案]   對話方塊隨即關閉。請注意,現在加入了兩個檔案:DCOMDemo_Svr.VBR   與   DCOMDemo_Svr.TLB。按一下   [下一步]   按鈕。  

注意   :您可以在   [遠端伺服器]   對話方塊中定義執行伺服器的電腦的名稱   (網路位址)。通常會將此欄位留白,因為您可能無法事先知道伺服器會安裝在哪裡。如果將此欄位留白,安裝用戶端時就會出現提示要您輸入此資訊。在本範例中,請將此欄位留白。  
7. 按一下   [下一步]   繼續進行。您現在可以依照「封裝暨部署精靈」的標準程序來繼續進行。在本範例中,請在所有剩下的對話方塊中按一下   [下一步]   即可。  
安裝伺服器  


使用之前建立的散發程式,在想要執行伺服器的電腦上安裝伺服器。如果您想要使用開發程式用的電腦來執行伺服器,就不需要執行安裝了,因為   Visual   Basic   在編譯伺服器時就已經執行註冊了。  
安裝用戶端  


使用之前建立的散發程式,在想要執行用戶端的電腦上安裝用戶端。因為此用戶端使用   DCOM   伺服器,而您在建立散發程式時沒有提供伺服器的實際位置,現在就需要提供此資訊了。當安裝程式要您輸入位置時,請輸入安裝伺服器的電腦的名稱。  
設定伺服器的安全性  
1. 运行NT服务器上的DCOMCNFG程序,进行DCOM配置。
2. 进入DCOM的应用程序页面,选择“DcomDemoSvr”。
 
3. 进入DCOM的默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
 

4. 进入DCOM的默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,如果不去掉EveryOne,应用服务器不能正常启动。
默认访问权限如图:  

默认启动权限如图:  

默认配置权限如图:  


5. 在应用程序页面双击“DcomDemoSvr”或点击“属性”,打开应用服务器DCOM属性设置。
6. 将常规页面中的身份验证级别改为“无”。
 

7. 位置页面中选上“在这台计算机上运行应用程序”。
 


8. 将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
9. 身份标识页面中,选择“交互式用户”。
 

10. GUEST用户不能禁用。  
設定客戶端:
    你也可以不用安裝程序來安裝客戶端,可以用服務器生成的vbr文件和CliReg32.exe來設定客戶端。
1,新增注冊表的Appid對應的CLSID來指定遠端的電腦,在每個CLSID下面新增字串上Appid的字串值。然後用DcomCnfg.exe來配置。當你配置好時,CLSID下的LocalServer32子鍵值改名為_   LocalServer32
2,也可以用CreateObject(class,RemoteServerName),建議用這種方式,因為用了這種方式可以提供負載平衡或容錯支持等強固的特色


五、跨DBMS的事務程序設計
Coordinating   Transaction   Manager   CTM
Resource   Manager   RM
Participating   Transaction   Manager   PTM

使用DTC執行一個分布式的交易時,你有兩種選擇,一:使用MTS的TM。   二、直接和DTC溝通的應用程序
六、Message   Query   程序設計語言