发送HTTP标头后,服务器无法设置内容类型 - 跟踪此情况

时间:2012-06-22 14:24:11

标签: asp.net http

我们的一位用户在我们的网络应用程序中收到错误。我们无法复制这个问题,我怀疑它与网络有关。我让用户在办公室和家中使用笔记本试用应用程序,并确认问题只发生在他们的办公室。

我登录服务器并在他们办公室试用后立即查看了事件查看器,并在日志中显示以下警告。

我对如何开始跟踪此问题感到茫然。有什么建议吗?

  

事件查看器记录如下:

     

事件代码:3005事件消息:发生了未处理的异常。   活动时间:6/20/2012下午6:32:45活动时间(UTC):2012年6月20日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:

2 个答案:

答案 0 :(得分:0)

可能与集成管道模式和经典管道模式有关。比较您的两种环境,确保它们在这方面没有区别。

IIRC在集成管道模式下,您可以在写入后重置或删除标头;在经典模式中你不能。

如果您不知道差异,请查看this文章。

答案 1 :(得分:0)

我正在添加第二个答案,以防我在写第一个答案时完全误解了这个问题。在这个答案中,我假设只有一个服务器,这是一个浏览器/用户特定的问题。

  1. 确认您发布的错误不是红色鲱鱼 - 检查其他事件的事件日志,并确保只有在您的用户遇到他或她的错误时才会发生。

  2. 请描述与错误相关的行为(例如浏览器显示什么?500错误?某种类型的系统错误消息?网络断开?)

  3. 检查来自浏览器的流量(例如,查看IIS日志)。除了他在流量中的显示方式外,您的服务器并不关心用户的任何信息。特别是我会留意接受标题中的差异,这可能是浏览器特定的,并且可能在服务器中触发不同的逻辑路径 - 尝试将内容类型设置为用户浏览器将接受的内容。 / p>

  4. 这是我现在对答案的疯狂猜测:

    ResultsXml.aspx的目的是返回某种文档;该文档需要外部应用程序(例如PDF或XML查看器);它以内联的内容配置返回它;并且办公室计算机的本地安全策略禁用缓存。在这种情况下,第三方查看器应用程序将无法找到该文件,因为缓存将不在那里。

    如果我错了,请发布以上内容,我会继续猜测:)