2011-07-21 109 views
1

我有一个Silverlight 4应用程序,我试图显示PDF。我的方法是在Silverlight应用程序中单击按钮,使用HtmlPage.Window.Navigate打开一个新的浏览器窗口。该新浏览器窗口导航到的URL是一个ASP.Net Web窗体页面,通过SSRS SOAP API调用SQL Reporting Services。这个调用返回一个字节数组,Web表单,然后用下面的代码流回到浏览器:通过Silverlight应用程序在IE8中显示PDF的问题

 byte[] report = SSRSRenderReport(reportPath, primaryId); 

     Response.ClearContent(); 
     Response.ClearHeaders(); 
     Response.AddHeader("cache-control", "must-revalidate"); 
     Response.AddHeader("content-length", report.Length.ToString()); 
     Response.Buffer = true; 
     Response.ContentType = "application/pdf"; 
     this.Response.AddHeader("Content-Disposition", "inline; filename=whatever.pdf"); 
     Response.BinaryWrite(report); 
     Response.Flush(); 
     Response.End(); 

这所有正在运行的IE9从和Firefox的应用程序时,工作得很好。但是,当从IE8运行应用程序时,新的浏览器窗口会在按钮点击后显示,然后立即关闭,而不会显示PDF或提示打开/保存PDF。

如果我将Silverlight从图片中取出并直接浏览呈现报表的URL,那么它可以正常工作,PDF将显示在浏览器中。我在使用HTTPS时看到了几篇描述这个问题的文章,但是我现在只使用HTTP。

有关如何解决此问题的任何建议将不胜感激。

回答

0

我们发现这个问题的根源在于我们试图从viewmodel而不是视图事件处理程序显示我们的弹出窗口。最终我们选择引入一个新的视图,其中包含一个指向PDF URL的超链接。这工作,并为我们,一个可以接受的解决方案。