使用 Visual Basic IDE 在 ASP 用戶端中偵錯 COM+ 元件時發生錯誤

使用 Visual Basic IDE 在 ASP 用戶端中偵錯 COM+ 元件時發生錯誤


徵狀

當您在 Microsoft Windows 2000 電腦上,使用 Visual Basic 6.0 對 Microsoft COM+ 1.0 版元件偵錯時,如果用戶端是動態伺服器頁面 (ASP,Active Server Page),瀏覽器可能會出現下列錯誤訊息。
Server object, ASP 0178 (0x800A0005) 當檢查使用權限時 Server.CreateObject 的呼叫失敗。拒絕存取此物件。
當您在 Microsoft WindowsXP 電腦上,使用 Visual Basic 6.0 對 Microsoft COM+ 1.5 版元件偵錯時,如果用戶端是動態伺服器頁面 (ASP,Active Server Page),瀏覽器可能會出現下列錯誤訊息。
Server object, ASP 0178 (0x800A0005) 當檢查使用權限時 Server.CreateObject 的呼叫失敗。拒絕存取此物件。
這個問題只有在您從 Visual Basic 整合式開發環境 (IDE) 中,執行「COM+ 元件」時才會發生。當您在 COM+ 應用程式中執行編繹過的「COM+ 元件」時,這個問題並不會發生。

回此頁最上方

發生的原因

如果您是使用匿名存取,那麼進行驗證的使用者 (通常是 IUSR_<machinename> 帳戶) 就沒有適當權限存取「DCOM 伺服器」(本例中的 VB6.exe)。當您在 Visual Basic IDE 中對「COM+ 元件」偵錯時,執行啟動的使用者就是使用中使用者,而存取「DCOM 伺服器」的使用者是進行驗證的使用者。

因為沒有專供 VB6.exe 使用的 DCOM 項目,因此 DCOM 是使用預設權限。在 Windows 2000 與 Windows XP 中,預設只有 System 帳戶與啟動系統的使用者才有「DCOM 預設存取權限」。如果啟動系統的使用者與存取「DCOM 伺服器」的使用者不是同一位,就會發生在<徵狀>一節中所顯示的錯誤訊息。

回此頁最上方

解決方案

這裡有兩個建議的解決方法:

回此頁最上方

解決方法一

新增一個專供 VB6.exe 使用的 DCOM 項目到登錄中。這可以讓您設定特定的 DCOM 權限,以在 Visual Basic 中對「COM+ 元件」偵錯。
1. 在 DCOM 中建立 VB ASP 偵錯 項目:
a. 啟動「Microsoft 記事本」或其他文字編輯器,並且鍵入下列語法 (需區分大小寫):
REGEDIT4
                        [HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}]
                        @="VB ASP Debugging"
                        [HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}\LocalServer32]
                        @="vb6.exe"
                        [HKEY_CLASSES_ROOT\AppID\vb6.exe]
                        "AppId"="{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}"
b. 將檔案儲存成 Vbaspdbg.reg。
c. 找到儲存 Vbaspdbg.reg 檔案的資料夾,並且按兩下這個檔案 (這個檔案就會自動登錄到 Windows 登錄中)。
2. 新增 Everyone 帳戶到對 Visual Basic ASP 偵錯的 DCOM 權限中。

Windows 2000
a. 啟動 DCOMCNFG。在 [開始] 功能表上,按一下 [執行],再於對話方塊中鍵入 dcomcnfg
b. [分散式 COM 設定內容] 頁面上,按一下 [應用程式] 索引標籤,從清單中選取 [VB ASP 偵錯],再按一下 [內容]
c. [VB ASP 偵錯內容] 的內容工作表上,按一下 [安全性] 索引標籤,再按一下選取 [使用自訂的存取權限] 的 核取方塊。按一下 [編輯]
d. [登錄值使用權限] 視窗中,按一下 [新增],再為 [允許存取] 新增 [Everyone] 帳戶。
e. 按一下 [確定],再按一下 [套用],套用所做的變更,然後結束 [分散式 COM 設定內容] 頁面。
f. 重新啟動電腦讓變更生效。
Windows XP

a. 啟動 COM+ Explorer。在 [開始] 功能表上,按一下 [系統管理工具],再按一下 [元件服務]
b. 按一下展開 [元件服務],按一下展開 [電腦],按一下展開 [我的電腦],再按一下展開 [DCOM 設定]
c. [VB ASP 偵錯] 上按一下滑鼠右鍵,再按一下 [內容]
d. [安全性] 索引標籤的 [存取權限] 下,選取 [自訂],再按一下 [編輯]
e. [存取權限] 視窗中,按一下 [新增],再新增 [Everyone 帳戶到允許存取] 選項。
f. 按一下 [確定],按一下 [套用],再按一下 [確定],套用所做的變更,然後結束 [DCOM 設定內容] 頁面。
g. 重新啟動電腦讓變更生效。

回此頁最上方

解決方法 2

1. 如果要偵錯,請在「虛擬目錄」的「應用程式保護」中,將 ASP 網頁設定為 [高 (隔離式)]。這樣可以強制 ASP 網頁使用自己的執行程序,如此可以在不影響其餘網站的情況下,變更安全性。
a. 啟動「網際網路服務管理員」。
b. 在 ASP 網頁駐留的「虛擬目錄」上按一下滑鼠右鍵,再按一下 [內容]
c. 按一下 [虛擬目錄] 索引標籤,再按一下 [應用程式保護] 下拉清單中的 [高 (隔離式)]
d. 按一下 [套用]
2. 關閉這個「虛擬目錄」的「匿名存取」,確定已選取 [整合式 Windows 驗證] 或是 [基本驗證]
a. 在「虛擬目錄」的 [內容] 對話方塊上,按一下 [目錄安全性] 索引標籤。
b. 按一下 [編輯],以做 [匿名存取] 與驗證的控制。
c. 確定已清除 [匿名存取] 核取方塊。
d. 按一下 [整合式 Windows 驗證] 或是 [基本驗證]
3. 如果使用的是「整合式 Windows 驗證」,那麼就執行用戶端瀏覽器,在用與 Visual Basic IDE 偵錯工作階段相同的使用者帳戶下,來存取 ASP 網頁。如果使用的是「基本驗證」,那麼為執行 Visual Basic IDE 偵錯工作階段所使用的相同使用者帳戶,輸入使用者名稱與密碼。

注意 第二個解決方法是假設 COM「預設存取權限」沒有變更過。如果「預設存取權限」沒有變更過,那麼 COM 會建立一個存取控制清單 (ACL,Access Control List),將存取權限授與 System 帳戶與「伺服器識別碼」。在這個案例中,「伺服器識別碼」是在登入執行 Visual Basic IDE 偵錯工作階段的使用者。如果 DCOM「預設存取權限」已經變更,那麼第二個解決方法要求為執行 Visual Basic IDE 的使用者帳戶,新增「預設存取權限」。這可以使用 DCOMCNFG 做到。如需詳細資訊,請參閱<其他相關資訊>一節中的「COM 安全性」連結。
posted @ 2008-07-08 23:21  Athrun  阅读(765)  评论(0编辑  收藏  举报