2014-11-04 19 views
1

我創建了一個Web項目,可以在發佈時以及在Visual Studio中進行調試時正常工作。當我通過引用管理器添加外部引用時,它會將其正確添加並在Visual Studio中運行到內部IIS Express。當我將網站發佈到我的服務器時,外部應用程序不起作用,看起來好像它們甚至不可用。Visual Studio外部引用無法在發佈的網站上工作

我錯過了什麼讓這些互操作的DLL在Web服務器中被看到?

必須有一些「鉤子」來連接到這些dll的,當在本地運行時使用,這在部署時不存在。簡而言之,這是一個我試圖部署到應用程序安裝並運行的服務器的API。當在VS本地運行時,API函數通常會正常運行,但在將其部署到同一臺服務器上的IIS網站時無法正常工作。 IIS網站具有完全權限,這不是問題,因爲此網站只能在內部網絡上運行,而不能在網絡上運行。

更新: 挖掘更深層次的奧祕我懷疑它與COM interop或API的使用方式有關。我已經將項目屬性設置爲「生成COM互操作」,並將API參考屬性設置爲Isolated = false,並將Embed Interop Type = True。我還爲整個項目設置了ComVisible = true。沒有生成錯誤。我可以看到.net或IIS日誌中沒有錯誤。我已爲所有適用的文件夾設置完全權限。那麼,我錯過了什麼?

我想我有社區難住這一個。我將嘗試改變爲一個後期調用者,看看是否有幫助。

對於感興趣的人來說,問題似乎是服務器上的DCOM權限。仍然不起作用,但至少服務器現在看到API,只是有COM異常錯誤,但這遠遠超出了我的能力。 API沒有源代碼或供應商支持。自從我爲API付款以來,這種事情讓我很生氣,當我要求協助時,他們說沒有可用的支持。

+0

作爲一個方面說明。這些是COM參考。 – dcol 2014-11-04 22:37:26

+0

你能更具體地瞭解這些dll嗎? – lockstock 2014-11-04 23:32:08

+0

其中一個DLL是常用的,interop.VBA其他是供應商特定的。該DLL是從添加到Reference Manager中的可執行文件中提取的。此COM參考是一個將調用發送到本地計算機上運行的程序的API。當這些調用在VS本地進行時,它們就可以工作,但是當我將Web項目部署到同一臺服務器上時,COM不再起作用。 – dcol 2014-11-05 15:04:31

回答

0

如果您引用的是本地外部程序集,請將它們作爲解決方案的一部分(例如在ThirdPartyAssemblies文件夾中)添加,然後在屬性下將每個DLL設置爲「始終複製」。

這應該確保您的程序集在構建時被複制到您的bin中,並且它們將在您的Web服務器上可見。

+0

這沒有奏效。該dll現在複製到Web服務器上的bin文件夾,但不起作用。當進行調用時,它應該調用服務器上的程序。我在服務器上安裝了VS和項目,在本地運行,並且工作正常。如果我將它發佈到本地系統,它不起作用。 – dcol 2014-11-04 22:35:58

+0

我是否需要在bin文件夾中註冊這些DLL? – dcol 2014-11-04 22:38:17

+0

您不需要在bin文件夾中註冊COM dll,因爲它們不需要特殊的文件夾,但您可能很需要註冊它們。在VS中測試的問題是,您通常使用比平均互聯網訪客帳戶更多的權限運行。大多數Web服務器沒有配置爲調用COM組件或其他資源,而無需提升這些權限或將它們應用於dll和他們所需的資源。 – 2014-11-05 00:17:01

相關問題