我继承了一个遗留应用程序,该应用程序应该从报告服务服务器中获取动态pdf.一切正常,直到您尝试打开返回的PDF格式,adobe acrobat告诉您:
Adobe Reader无法打开'thisStoopidReport'.pdf',因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送而未正确解码).
我已经做了一些初步的故障排除.如果我用我本地计算机上的有效pdf文件替换WebRequest.Create()调用中的url,即:@"C:temp/validpdf.pdf",那么我得到一个有效的PDF.
报告本身似乎运作正常.如果我手动键入应生成pdf文件的报告服务报告的URL,系统会提示我进行用户身份验证.但在提供之后我得到了一个有效的pdf文件.
由于显而易见的原因,我已将伪代码中的实际url,username,userpass和域字符串替换为伪造的值.
WebRequest request = WebRequest.Create(@"http://x.x.x.x/reportServer?/reports/reportNam&rs:format=pdf&rs:command=render&rc:parameters=blahblahblah");
int totalSize = 0;
request.Credentials = new NetworkCredential("validUser", "validPass", "validDomain");
request.Timeout = 360000; // 6 minutes in milliseconds.
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = 0;
WebResponse response = request.GetResponse();
Response.Clear();
BinaryReader reader = new BinaryReader(response.GetResponseStream());
Byte[] buffer = new byte[2048];
int count = reader.Read(buffer, 0, 2048);
while (count > 0)
{
totalSize += count;
Response.OutputStream.Write(buffer, 0, count);
count = reader.Read(buffer, 0, 2048);
}
Response.ContentType = "application/pdf";
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Expires = 30;
Response.AddHeader("Content-Disposition", "attachment; filename=thisStoopidReport.pdf");
Response.AddHeader("Content-Length", totalSize.ToString());
reader.Close();
Response.Flush();
Response.End();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8164 次 |
最近记录: |