2012-02-07 125 views
7

我捕獲了一些訪問我網站特定部分的用戶的信息,並且出現奇怪的錯誤。我有一段代碼執行以下操作。HttpRequestBase.UserHostAddress拋出錯誤

string userIp = request.UserHostAddress; 

請求變量是一個HttpRequestBase。有時候這種方式工作的很好,我得到了IP--其他時候它會拋出一個錯誤,我不知道如何防範。這是來自我的錯誤日誌。

「值沒有在預期範圍之內。在System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(的Int32的errorCode,IntPtr的errorInfo中) 在System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(字符串名稱)」

看來,我第一次去它的網頁工作得很好,如果我進行刷新,就會拋出錯誤,或者快速進入捕獲相同變量的另一個頁面。

+0

看看這是否可以幫助你:http://stackoverflow.com/questions/650357/httprequest-servervariables-throws-argumentexception-in-wcf-with-iis7 – 2012-02-07 16:13:35

+0

我發佈之前,我讀了一個。這不適用於此。我沒有將合同設置爲OneWay。 – Mitch 2012-02-07 16:45:28

+0

你可以嘗試'System.Web.HttpContext.Current.Request.UserHostAddress' - 只是爲了防止HttpRequestBase不會像HttpRequest – 2012-02-07 18:27:30

回答

6

我有我的記錄器這個確切的問題。我正在使用依賴注入,因爲我懷疑你是。

在我的情況,我得到這個錯誤,因爲我沒有綁定我的記錄器到請求範圍。所以,它在兩個請求之間生存,並且保留了一些HttpContext屬性,但是在與IIS交談時拋出異常。

由於我使用的是Ninject,因此只需將名稱空間Ninject.Web.Common中的InRequestScope()方法添加到我的綁定中即可。

總之:這個例外似乎是拋出的HttpContext陳舊實例時,某些屬性,被整理到IIS和該請求不再有效,被訪問。

希望有幫助!

p.s. NLog比您要編寫的任何記錄器都要好。或者,如果你只是想要例外,那就放入ELMAH。

+1

我從一個有點不同的情況得到了這個錯誤。在ASMX webservice中,我做了一些後期工作,可能長期運行,而且我想在不減慢主要操作的情況下完成工作。所以我用'Task.Factory.StartNew'運行它。由於完成工作需要一些訪問HttpContext,我愚蠢地從啓動任務的lambda中設置HttpContext.Current。當它嘗試訪問ServerVariables時發生崩潰。 – 2013-12-31 18:50:47