2015-10-14 31 views
1

我有一个最小的ASP.NET处理程序(ashx的)无响应返回一个PDF文件:从ASP.NET HTTP Handler--只在特定的HTTP客户端上的特定机器

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客户端),以在本地主机上执行HTTP GET:45050/handler1.ashx,一个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

我能决心本地主机:45050(该网站的主页)通过DHC这个备用机上。服务器以200 OK响应并产生登录页面。

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

任何帮助将不胜感激。谢谢!

+1

不能确定何时涉及IIS Express,但对于常规IIS,问题可能与MIME类型有关。两个IIS实例都有.pdf文件扩展名的映射吗? – Culme

+0

是的,这两个实例都有一个application/pdf映射。我解决了这个问题。请参阅下面的答案。感谢您查看这个! – jforce

回答

1

这里顶端回答...

Best way to stream files in ASP.NET

...解决了这个问题。看起来,在单个调用中编写大型文件在某些​​服务器上是不允许的。您必须手动分段响应。