簡體   English   中英

嘗試在.NET應用程序中讀取或寫入受保護的內存

[英]Attempted to read or write protected memory in a .NET application

我在IIS 6服務器中實現和ASP .Net應用程序時遇到了麻煩。

當用戶嘗試打開訪問數據庫的網頁時,iis服務器會拋出“嘗試讀取或寫入受保護的內存”這是StackTrace:

System.AccessViolationException:嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞。 at Oracle.DataAccess.Client.OpsPrm.ResetValCtx(OpoPrmValCtx * pOpoPrmValCtx,Int32 ctxSize),位於Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn,IntPtr errCtx,Int32)的Oracle.DataAccess.Client.OracleParameter.ResetCtx(Int32 arraySize)在Tenaris.FSA的Oracle.DataAccess.Client.OracleCommand.ExecuteScalar()上的Oracle.DataAccess.Client.OracleCommand.ExecuteReader()處的Oracle.DataAccess.Client.OracleCommand.ExecuteReader(布爾請求,布爾fillRequest,CommandBehavior行為)中的arraySize) .OracleProvider.OracleProvider.ExecuteScalar(String commandToExecute,CommandType commandType,DbParameter []參數)在C:\\ Congelados FSA \\ FSA 1er中可入侵05052013 \\ Tenaris.FSA.OracleProvider \\ OracleProvider.cs:第223行在Tenaris.FSA.DAC.Providers C:\\ Congelados FSA \\ FSA 1er中的.DataAccessManager.ExecuteScalar(String commandToExecute,CommandType commandType,DbParameter []參數)Entvable 05052013 \\ Tenaris.FSA.DataAccessComponent \\ Providers \\ DataAccessManager.cs:第59行a t Tenaris.FSA.DAC.Repository.AppointmentWayClientDAL.GetCountRegisters(Boolean onlyEnabled)位於C:\\ Congelados FSA \\ FSA 1er Entregable 05052013 \\ Tenaris.FSA.DataAccessComponent \\ Repository \\ AppointmentWayClientDAL.cs:第39行:Tenaris.FSA.BusinessComponents.BusinessProcess .AppointmentWayClientManager.GetCountRegisters(Boolean onlyEnabled)在C:\\ Congelados FSA \\ FSA 1er Entregable 05052013 \\ Tenaris.FSA.BusinessComponents \\ BusinessProcess \\ AppointmentWayClientManager.cs:第28行

什么是罕見的,因為該錯誤不應該出現在托管代碼中,並且該站點的先前版本工作正常。 我做了幾個測試,比如在x86平台電腦上編譯應用程序,從功能版本復制web.config,從功能版本復制Oracle.DataAccess dll,但錯誤仍然顯示。

你應該知道的另一件事是,有一個頁面實際上已經成功填寫了一個下拉列表,但是頁面必須填充一個gridview並出現上述異常。

我終於可以解決這個問題,另一個開發人員在創建OracleParameters時使用了“using”子句,它就像:

using(OracleParameter prm = SomeMethodThatCreatesIt(value,paramName))
{
 //extracode
 myCommand.Parameters.Add(prm);
}

所以代碼必須改為:

OracleParameter prm = SomeMethodThatCreatesIt(value,paramName);
//extracode
myCommand.Parameters.Add(prm);

正如您在stacktrace中看到的那樣,問題出在參數的某個過程中。

所以,代碼是在使用它之前處理對象。 我無法理解的是,為什么這甚至在我的測試之一的控制台應用程序中工作,但現在它正在工作,謝謝大家

系統已經用完ram來加載它,所以當它試圖從受保護的內存的其他應用程序中獲取更多時,這樣可以獲得更多內存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM