ASP.NET HTTP Handler没有响应 - 仅在特定计算机上的特定HTTP客户端上

时间:2015-10-14 13:44:38

标签: c# asp.net http httphandler

我有一个最小的ASP.NET处理程序(.ashx),它返回一个PDF文件:

public void ProcessRequest(HttpContext context)
      {

         context.Response.ContentType = "application/pdf";
         context.Response.BinaryWrite(File.ReadAllBytes(context.Server.MapPath("~/files/GettingStarted.pdf")));

      }

      public bool IsReusable
      {
         get
         {
            return false;
         }
      }
   }

当我在IIS Express上运行我的Web应用程序时,该应用程序托管在localhost:45050。如果我在主开发机器上浏览到localhost:45050 / handler1.ashx,则会按预期下载PDF。如果我使用DHC Chrome扩展程序(HTTP客户端)在localhost:45050 / handler1.ashx上执行HTTP GET,则会返回HTTP 200 OK响应代码以及二进制数据:

DHC response on dev machine

然而,如果我在不同的机器上运行完全相同的ASP.NET项目,我会遇到奇怪的问题。随着项目在localhost:45050上本地运行,我仍然可以浏览到Chrome / Firefox / IE中的localhost:45050 / handler1.ashx来下载文件。但是,当我使用DHC扩展在localhost:45050 / handler1.ashx上执行HTTP GET时,没有响应!

response on alt machine

我可以在这台备用计算机上通过DHC解析localhost:45050(网站的主页)。服务器以200 OK响应并生成登录页面。

但在处理返回二进制内容的处理程序时,除了浏览器的URL栏之外,我无法从服务器获取任何HTTP客户端的任何响应。浏览器如何能够独立HTTP客户端不能解决HTTP响应?有谁知道这里可能会发生什么?什么会导致机器间的行为改变?我试图在JavaScript客户端中处理响应,但我没有收到任何数据。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这里的最佳答案......

Best way to stream files in ASP.NET

......解决了这个问题。似乎在一次调用中编写大文件在某些​​服务器上是禁止的。你必须手动分组响应。