2014-08-29 109 views
1

我有一個ASP.NET網站,在我的家用PC上完美無瑕地執行。但是當我從主機提供商運行它時不太好。我需要在後面的代碼中調用一個COM DLL。本地IIS7始終會在我的DLL導入屬性中找到指定爲「C:\ MyDLL.dll」的DLL。問題是,無論何時執行對我的DLL的調用的代碼,頁面上都不會發生任何事情。就好像代碼從不執行?因此,爲了在我的最後查明問題,我承諾在家中設置一個運行IIS7的Win2k8服務器來複制我的主機提供程序環境。花了一段時間才知道如何將我的網站加入到IIS7中,但是現在我終於能夠執行我的網站了。但!我期待更好的日誌記錄?似乎登錄IS7的範圍僅限於記錄哪些頁面加載以及何時加載? :(IIS7處理程序映射

我沒有挖成跟蹤呢。也許我的下一個選擇,但我不知道是否「處理程序映射」可以做什麼來幫助我的加載COM DLL?可能是一個權限的事情嗎?

回答

0

有在這裏一個類似的問題,有一些技術,可以幫助您解決: Web service works in asp.net but not IIS

即:

  • 的差異用戶上下文本地服務器之間(不知道你正在使用的網絡服務器...如IIS在Vis中表達ual Studio?)以及IIS 7應用程序池上的進程標識。
  • ASP.NET中的可信賴級別,可在計算機上配置。然而,這聽起來像你正在與一個虛擬主機公司合作,這個虛擬主機公司通常不允許網絡應用以完全信任的方式運行(除非你有一個完整的虛擬機)。
  • 在您的家庭服務器上,您可以檢查Windows事件日誌,並查看是否在觸發代碼時注意到任何寫入錯誤(例如,檢查應用程序日誌和安全日誌)。另外,您可以嘗試運行免費的SysInternals工具之一,例如Process Explorer或Process Monitor(http://technet.microsoft.com/en-us/sysinternals/bb795533.aspx),它允許您實時查看機器上資源的訪問和故障。
+0

感謝您的幫助。我仍然處於黑暗中。我不知道行爲的來源是什麼。我讀過關於冒充的事,但我不確定這是否是問題。用戶上下文?直到我可以跟蹤執行到調用我的外部DLL函數爲止,我都不知道。否則,我不知道我在找什麼。 – 2014-08-30 15:37:42

0

那麼,我會被詛咒的。在我的電腦上,我擁有寶貴的DLL,位於「C:\ myDLL.DLL」,它可以從VisualStudio2013完美地工作。只要我頑固地堅持把我的DLL放在同一位置(爲什麼不呢?)在我的測試Win2k8 64位服務器框中運行IIS7,當我的C#試圖在Internet Explorer中嘗試調用我的DLL函數時,什麼都沒有發生(或Firefox或Chrome)。沒有,nada,zilch,rien du tout :(

在user2731610的建議下,我使用ProcessMonitor檢查我的DLL是否被ASP進程worker訪問,ProcessMonitor顯示找到了DLL並且正確「創建」,「打開」和「查詢內部」,但沒有發生過這一點?

我在我的DLL上使用了DependencyWalker,發現在myDLL.dll中引用了NT.dll和Kernel32.dll。我推斷,也許,myDLL.dll需要位於相同的位置作爲那些其他兩個DLL?所以我把myDLL移到了C:\ Windows \ System32,還有C:\ Windows \ SysWOW64。爲什麼不呢?我決定把一個副本在這兩個地方,以防萬一。因爲我記得,當我運行ProcessMo時nitor早些時候ASP系統地查詢了多個位置來搜索我的DLL?可能包含在PATH聲明中的所有位置?難道它複雜...

DependencyWalker在我的DLL中顯示3個條目。首先,Kernel32.DLL,CPU = x64。其次,NTDLL.DLL,CPU = x64。第三,myDLL,CPU = x86。不同的CPU「類型」被DependencyWalker標記爲「具有不同CPU類型的模塊」的錯誤?我相信myDLL編譯爲32位,而Kernel32和NTDLL編譯爲64位。儘管如此,這似乎並不重要。

在安全性下,我添加了IIS_IUSRS用戶並完全控制它。這種設置可能沒有什麼區別,但在嘗試診斷問題的過程中,這可能是一個候選人。

最後,我想說,我在這個問題上花費了太多的時間,並且我廣泛地搜索網絡尋求幫助。我對所遇到的所有文章和帖子感到沮喪,沒有真正清楚發生了什麼。我猜COM被認爲是老技術,新的資源將被管理的解決方案。

這是一個漫長而令人沮喪的研究的結尾。我看不到隧道盡頭的燈光,並且即將詛咒微軟。感謝您的幫助和耐心。

相關問題