2010-11-09 14 views
0

因此,我有一個非託管C++ dll,我從我的ASP.NET應用程序調用,它有一個入口點和一些傳遞數據的結構。如果我創建一個C#控制檯應用程序來調用DLL,它工作正常。如果我把它連接到我的本地WinXP機器上運行的asp.net應用程序(IIS 5.1),那麼它工作正常。ASP.NET初次請求後未能調用非託管dll

當我將它發佈到運行Windows 2003和IIS 6的開發環境中時,第一個1或2個調用可以正常工作,但它只是停止響應。我沒有收到任何錯誤消息,警告等等,但是我的頭髮很快就沒了!

我已經在自己的應用程序池中設置了運行asp.net應用程序的虛擬目錄,但這似乎沒有影響。任何幫助將不勝感激。

乾杯

+0

一槍就是黑暗 - 但問題可能與asp如何處理線程創建和工作進程有關。閱讀你的答案,我不認爲這個DLL實際上是失敗的,而是一個線程相關的問題。還考慮在每次請求結束時妥善處理任何引用,您可能需要對非託管代碼進行引用。不要依賴GC。 – Ahmad 2010-11-09 10:17:37

回答

0

當你說它停止響應時,你是什麼意思?您可以嘗試使用日誌語句來跟蹤調用的輸入/輸出,以查看它在哪裏阻塞。另外請確保您檢查寫入未處理的ASP.NET錯誤的服務器事件日誌。作爲最後的手段,您可以在服務器上安裝Visual Studio遠程調試工具(msvsmon.exe),並通過附加到相應的w3wp進程來遍歷代碼。實際上調試工具不需要安裝,簡單的拷貝就足夠了(C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger)。

+0

在asp.net代碼中記錄了調用,所以我可以看到asp.net日誌記錄表示它已經啓動並完成。也有最早的機會記錄在dll中,這根本不會發布任何日誌記錄。在服務器事件中也沒有多久。 – 2010-11-09 09:52:12

+0

其實我找到了問題,不知道爲什麼兩個環境之間的差異,但它與我最初的問題無關 – 2010-11-09 09:53:31

0

失敗實際上出現在C++代碼本身中,它有一些代碼來處理線程環境的鎖定,這似乎是失敗的。不知道爲什麼它可以在我的本地機器上運行,而不是在開發環境中運行,但這是另一個問題

謝謝全部