2011-03-10 82 views
1

最近,我面臨一個我認爲很容易實現的問題。 我有一個COM對象已經安裝在我的Windows 7機器上。 我想圍繞這個COM對象構建一個web服務或WCF服務。 不幸的是,無論我嘗試什麼似乎都沒用。互操作:在ASMX webservice或WCF服務中使用COM - C#

我安裝了Visual Studio 2008和2010。 使用VS IDE,我創建了對COM的引用,並且如預期的那樣,VS自動創建了訪問COM成員所需的interop DLL。

當我在一個winforms應用程序中嘗試這樣做時,一切正常,但在服務中使用時,我的運氣消失了。

的代碼supersimple,它看起來像這樣:

LCDirect_WebLogin.CoClass_n_ap_com com = (LCDirect_WebLogin.CoClass_n_ap_com)obj.Unwrap(); 
object value = null; 
string name = ""; 
com.getsysteminfo(name, ref value); 
if (value != null) 
    return value.ToString(); 

所以,在winform應用程序相同的代碼工作正常,但在IIS下崩潰。

一些額外的信息: 最後我需要部署在Windows 2003 Server上。 COM DLL依賴於PowerBuilder運行時。我在我的system32中複製了PB運行時,並且還在web服務的bin文件夾中複製了PB運行時。

我不認爲這是一個依賴性問題,而是調用非託管代碼的安全問題。

我也嘗試使用應用程序池和使用管理員帳戶運行下運行webservice更多proviledged帳戶下運行。同樣的問題。

任何想法? 謝謝。

+0

IIS有不同的安全設置,整個堆棧 - 它可能從裝入積極阻止您的COM二進制文件工作進程。也許嘗試http://serverfault.com/尋求幫助? – 2011-03-10 08:58:05

回答

0

在你的Windows應用程序中,你在登錄用戶的安全上下文中。

在服務中,缺省值是您在應用程序池的標識的安全上下文中執行。可能是NETWORK SERVICE用戶,即不允許調用COM。

+0

設拉子,我知道上下文是什麼,但是:我嘗試通過將另一個用戶分配給服務進程(如管理員)來更改上下文。我還看到了以管理員帳戶運行的taskmanager中的進程。還是一樣的錯誤... – Adi 2011-03-10 12:08:31