2012-06-22 60 views
5

我們的一位用戶在我們的Web應用程序中出現錯誤。我們不能重複這個問題,我懷疑它是網絡相關的。我讓用戶在他們的辦公室和家中使用他們的筆記本來嘗試應用程序,並確認問題只發生在他們的辦公室。服務器在發送HTTP頭之後無法設置內容類型 - 跟蹤此問題

我登錄到服務器並在他們的辦公室嘗試後查看了事件查看器,並且以下警告出現在日誌中。

我不知道如何開始跟蹤這個問題。有什麼建議麼?

事件查看器日誌如下:

事件代碼:3005事件消息:發生未處理的異常。 事件時間:6/20/2012 6:32:45 PM事件時間(UTC):6/20/2012 10:32:45 PM事件ID:ebf8f628a9b3457cbea117c8c2da2186事件序列:2970 事件發生:26事件詳細信息代碼: 0應用程序信息:

Application domain: /LM/W3SVC/50/ROOT-1-129847041933281152 
Trust level: Full 
Application Virtual Path:/
Application Path: c:\websites\foobar.acme.com\ 
Machine name: MyServer Process information: 
Process ID: 15152 
Process name: w3wp.exe 
Account name: NT AUTHORITY\NETWORK SERVICE Exception information: 
Exception type: HttpException 
Exception message: Server cannot set content type after HTTP headers have been sent. Request information: 
Request URL: http://foobar.acme.com/Project/Evaluate/ResultsXML.aspx?step=89&uid=4397&rnd=hhf8oe 

Request path: /Project/Evaluate/ResultsXML.aspx 
User host address: 192.168.102.1 
User: 
Is authenticated: False 
Authentication Type: 
Thread account name: NT AUTHORITY\NETWORK SERVICE Thread information: 
Thread ID: 12 
Thread account name: NT AUTHORITY\NETWORK SERVICE 
Is impersonating: False 
Stack trace: at System.Web.HttpResponse.set_ContentType(String value) at System.Web.UI.Page.SetIntrinsics(HttpContext context, 
Boolean allowAsync) at 
System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 
at System.Web.UI.Page.ProcessRequest(HttpContext context) at 
ASP.error_aspx.ProcessRequest(HttpContext context) at 
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, 
TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, 
VirtualPath path, VirtualPath filePath, String physPath, Exception 
error, String queryStringOverride) 
Custom event details: 
+0

可能重複[之後HTTP標頭已被送往IIS7.5服務器不能設置狀態(HTTP://計算器.com/questions/2383169/server-can-set-status-after-http-headers-have-been-sent-iis7-5) –

+0

[HTTP服務器在發送HTTP頭文件後無法設置內容類型](http :http://stackoverflow.com/questions/901083/server-cannot-set-content-type-after-http-headers-have-been-sent) –

+0

[服務器無法設置HTTP標頭髮送後的內容類型] (http://stackoverflow.com/questions/9360857/server-cannot-set-content-type-after-http-headers-have-been-sent) –

回答

0

可能與集成與經典管道模式做。比較你的兩個環境,並確保它們在這方面沒有區別。

IIRC在集成管道模式下,您可以在寫入標題後重置或刪除標題;在經典模式下你不能。

如果您不知道區別,請檢查this文章。

+1

什麼樣的兩種環境?除非我誤解了這個問題,否則只有一個服務器? – hvd

+0

有趣的是,我把這個問題看作是一個不起作用的環境(「辦公室」)和其他人。但是在第二次讀取時,也許只有一臺服務器,這是某種瀏覽器/網絡問題。如果是這樣的話,事件日誌中的錯誤可能是紅鯡魚,或者這是一個奇怪的問題。 –

0

我在添加第二個答案,以防我在寫第一個答案時完全誤解了這個問題。在這個答案中,我假設只有一個服務器,這是一個瀏覽器/用戶特定的問題。

  1. 確認您發佈的錯誤不是紅色herring--檢查其他事件的事件日誌,並確保當你的用戶遇到他或她的錯誤時纔會發生。

  2. 請描述與錯誤相關的行爲(例如什麼是瀏覽器顯示?500錯誤?系統錯誤某種網絡斷開消息?)

  3. 檢查來自瀏覽器的流量(如看在IIS日誌中)。除了他在流量中出現的方式之外,您的服務器不關心用戶的任何信息。特別是,我會留意接受頭文件中的差異,這些頭文件可能是瀏覽器特定的,並可能在服務器中觸發不同的邏輯路徑 - 嘗試將內容類型設置爲用戶瀏覽器可接受的內容類型。

這裏是我的胡亂猜測處答案現在:

ResultsXml.aspx的目的是返回某種類型的文件;該文檔需要外部應用程序(例如PDF或XML查看器);它以內聯的內容處置方式返回它;而辦公室計算機的本地安全策略會禁用緩存。在這種情況下,第三方查看器應用程序將無法找到該文件,因爲緩存不在那裏。

如果我錯了,請張貼上述情況,我會繼續猜:)

相關問題