2011-08-15 79 views
1

我遇到了一個我似乎無法解決的問題。背景:多年前,我爲使用ASP 2.0和Ajax的客戶開發了一個網站。網站的一項功能是根據需要生成客戶發票。他們的內部生產系統是在Visual Foxpro 8中用SQL Server 2005編寫的。由於我已經有了一個可生成PDF文件的發票生成對象,因此我捲起了一個COM EXE並創建了一個COM包裝器,用於我的ASP頁面。它工作很多年了,但現在我們正試圖將頁面移到不同的位置,並且事情並沒有那麼好。移動到新服務器時COM互操作失敗

網絡技術人員重新制作了環境,網站的其他部分完美運行。我甚至可以實例化COM對象(我記錄了init,一切都很好),但是第一次調用其中一個對象方法會導致「異常來自HRESULT:0x80010105(RPC_E_SERVERFAULT))」。我只是被卡住了!

這裏是沒有問題:

1)來自同一服務器使用的Visual FoxPro程序,我可以實例化對象,調用生成發票方法生產的PDF - 沒有任何問題。

2)從一個非常簡單的ASP頁面使用VBScript,我可以使用Server.CreateObject()來實例化對象,併成功地從那裏生成發票。

到目前爲止,我知道:

1)對象已正確註冊,並推出爲正確的用戶,所有做它的業務所需的權利。

2)COM EXE和COM對象版本的包裝匹配。

我很抱歉這麼長的帖子。長話短說:爲什麼在實例化成功後,ASP.NET無法調用VFP COM對象的任何方法?

在此先感謝 - 我嚴重卡在這一個。

埃裏克

回答

0

你編譯爲一個EXE,運行時DLL,或者多線程DLL。另外,我以前遇到的問題是OlePublic dll條目的單個或多個實例。要確認,請修改您的項目...然後從頂部菜單中點擊「項目」,然後點擊「項目信息」。在第三個選項卡上是「服務器」,顯示項目中可用的服務器。它的右側是「Instancing」,它可以是單個或多個。有時候,把它扔到單身已經解決了我的實例。但是,如果多線程,請確保你也有多線程的DLL .. VFP9T.DLL

---編輯響應... 由於你編譯它爲一個EXE,它可能會顯示作爲分佈式COM對象。轉到Windows「開始」,然後運行「DCOMCNFG」,它將啓動DCOM配置管理器。您必須向下滾動項目列表,直到找到您的exe文件(OlePublic類名稱),並且可能必須修改權限,誰可以啓動/訪問/執行...應用模擬等...

FOR僅測試---您可以將此COM服務器設置爲模擬管理員 - 只是測試,看看是否有任何錯誤。如果沒有錯誤,那麼你會知道它的權限,然後將其更改回更受限制的用戶。

+0

謝謝你的回覆!我將它編譯爲COM EXE –

+0

@Erik F,查看修改後的評論 – DRapp

+0

經過研究這個問題後,我找到了解決辦法。將COM對象添加到數據執行預防(DEP)例外列表允許進行方法調用,並且再次適用於全球。 謝謝你的時間和關注 - 真的很感謝! –