我有一个WCF
服务,它会收到一个id并返回一个基于id的pdf文件。我假设最好的方法是将pdf文件转换为某种字符串然后返回它。但是,我不确定要使用哪个流(Stream, Filestream, or MemoryStream
)。
我知道我可以将pdf文件读取到一个字节数组,然后使用MemoryStream对它做一些事情,但我觉得有一种更有效的方法。
我尝试按照此帖中的建议进行操作:How to convert a pdf to a memory stream
对文件路径进行硬编码以返回如下:
return File(@"C:\MyFile.pdf", "application/pdf");
只是为了看看会发生什么,但在File
上得到一个错误:`'System.IO.File'是'type',但用作'变量'。
有人能提供一点见解吗?
修改
这是我正在努力的目标:
[OperationContract]
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/GetInvoiceFile")]
Stream GetInvoiceFile(string id);
public Stream GetInvoiceFile(string BillingPeriodId)
{
byte[] bytes = File.ReadAllBytes(@"C:\pdf-test.pdf");
return new MemoryStream(bytes);
}
我只是不知道如何编辑我的OperationContract
以返回pdf。有什么想法吗?
答案 0 :(得分:2)
答案取决于你拥有的东西。您似乎将文件路径设为string
。可能,您的WCF方法返回byte[]
。您需要以某种方式将该路径有效地转换为byte[]
。
您可以使用File.ReadAllBytes(string path)
。
WCF也支持流式写入,但这有点复杂,性能优势对于小文件来说是可疑的。
您尝试指定MIME类型("application/pdf"
)的事实告诉我您并不真正理解WCF服务和HTTP服务之间的区别。研究这是你的功课。