Return pdf 字节数组 WCF
Return pdf byte array WCF
我正在使用 Web 服务 WCF return 字节数组格式的 PDF 文件。我只是 returning 我在这样的资源中拥有的 pdf 文件:
public byte[] displayPDF(string pdfName){
return Service.Properties.Resources.testFile;
}
但是在客户端,当我收到字节数组并将其写入我计算机上的文件时:
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var response = client.GetAsync(uri);
byte[] byteArray = response.Result.Content.ReadAsByteArrayAsync().Result;
var filePath = "C:\Users\Admin 1\Documents\temp.pdf";
System.IO.File.WriteAllBytes(filePath, byteArray);
它写出一个 PDF 文件到我的文档,但是当我点击它时它说无法查看 PDF,因为它不是受支持的文件类型或者它可能已损坏。
我看过一些关于不发送字节数组而是使用流发送它的帖子。我想知道是否有任何关于如何正确执行此操作的示例,以便我可以将字节数组或流或您建议的任何内容写入客户端的 pdf 文件,然后通过单击手动打开文件。
注意:我正在使用 REST 访问 Web 服务。所以添加服务引用不是一个选项。
好的,我找到了答案,并尝试了一下,确实有效。所以答案是您应该使用 Stream 而不是字节数组。对于任何其他想要示例的人,我在服务器端将我的代码修改为:
public Stream displayPDF(string pdfName)
{
MemoryStream ms = new MemoryStream();
ms.Write(Service.Properties.Resources.testFile, 0, Service.Properties.Resources.testFile.Length);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", "inline; filename=" + pdfName);
return ms;
}
在客户端:
Console.WriteLine("Started");
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var responseTask = client.GetStreamAsync(uri);
var response = responseTask.Result;
using (System.IO.FileStream output = new System.IO.FileStream(@"C:\Users\Admin 1\Documents\MyOutput.pdf", FileMode.Create))
{
response.CopyTo(output);
}
我正在使用 Web 服务 WCF return 字节数组格式的 PDF 文件。我只是 returning 我在这样的资源中拥有的 pdf 文件:
public byte[] displayPDF(string pdfName){
return Service.Properties.Resources.testFile;
}
但是在客户端,当我收到字节数组并将其写入我计算机上的文件时:
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var response = client.GetAsync(uri);
byte[] byteArray = response.Result.Content.ReadAsByteArrayAsync().Result;
var filePath = "C:\Users\Admin 1\Documents\temp.pdf";
System.IO.File.WriteAllBytes(filePath, byteArray);
它写出一个 PDF 文件到我的文档,但是当我点击它时它说无法查看 PDF,因为它不是受支持的文件类型或者它可能已损坏。
我看过一些关于不发送字节数组而是使用流发送它的帖子。我想知道是否有任何关于如何正确执行此操作的示例,以便我可以将字节数组或流或您建议的任何内容写入客户端的 pdf 文件,然后通过单击手动打开文件。
注意:我正在使用 REST 访问 Web 服务。所以添加服务引用不是一个选项。
好的,我找到了答案,并尝试了一下,确实有效。所以答案是您应该使用 Stream 而不是字节数组。对于任何其他想要示例的人,我在服务器端将我的代码修改为:
public Stream displayPDF(string pdfName)
{
MemoryStream ms = new MemoryStream();
ms.Write(Service.Properties.Resources.testFile, 0, Service.Properties.Resources.testFile.Length);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", "inline; filename=" + pdfName);
return ms;
}
在客户端:
Console.WriteLine("Started");
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var responseTask = client.GetStreamAsync(uri);
var response = responseTask.Result;
using (System.IO.FileStream output = new System.IO.FileStream(@"C:\Users\Admin 1\Documents\MyOutput.pdf", FileMode.Create))
{
response.CopyTo(output);
}