WCF函数不会返回流

时间:2011-05-11 20:45:03

标签: vb.net wcf function filestream

所以我有一个返回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

对我而言似乎应该有效。有什么想法吗?

2 个答案:

答案 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以获取说明以及您采取该方法时需要了解的一些限制。