所以我有一个返回pdf流的函数。调用过程获取流并将其写入磁盘(感谢ServiceGuy!)。普通VB代码如下:
Public Function GetPDF() As System.IO.FileStream
GetPDF = File.OpenRead("C:\Documents and Settings\jspel903\Desktop\3211LD.pdf")
End Function
现在,无论出于何种原因,当我将该代码放入我的WCF(见下文)并构建/安装时,它都不会返回任何内容。在我的WCF托管在Windows服务之后,调用过程什么都没有(我无法调试或进入)。所以我想知道WCF是否会返回FileStream?
这是IService:
<ServiceContract()> _
Public Interface IService1
<OperationContract()> _
Function GetPDF() As System.IO.FileStream
'Should return a .pdf file as a stream
End Interface
这是svc:
Imports System.IO
Public Class Service1
Implements IService1
Public Function GetPDF() As System.IO.FileStream Implements IService1.GetPDF
GetPDF = File.OpenRead("C:\Documents and Settings\jspel903\Desktop\3211LD.pdf")
End Function
End Class
对我而言似乎应该有效。有什么想法吗?
答案 0 :(得分:1)
您可能希望将FileStream转换为字节数组并返回该数组。 WCF通常仅限于返回可序列化类型。
// fs is your FileStream
byte[] Data = new byte[fs.Length];
fs.Read(Data,0,fs.Length);
答案 1 :(得分:1)
它不会起作用......想一想它是什么意思。您的WCF客户端可以访问您的服务器设备上的文件流。它必须能够通过远程连接执行本地可以执行的所有操作。
WCF是数据的传输机制,它实际上不会将对象引用发送到服务器的对象。客户端获取对象的副本,该副本已由服务器序列化,然后在客户端进行反序列化。如果您可以发送流对象,则文件句柄/内存引用等对接收客户端没有任何意义。
您需要从服务器上的流中读取数据,然后将其转换为适当的数据对象以传输回客户端。
编辑:
显然你可以在WCF中使用流媒体,但是你无法返回System.IO.FileStream,你可以返回一个流。
请查看:Large Data And Streaming以获取说明以及您采取该方法时需要了解的一些限制。