WCF 函数不会返回流



所以我有一个返回pdf流的函数。调用过程获取流并将其写入磁盘(感谢 ServiceGuy!普通VB代码如下:

Public Function GetPDF() As System.IO.FileStream
    GetPDF = File.OpenRead("C:Documents and Settingsjspel903Desktop3211LD.pdf")
End Function

现在,无论出于何种原因,当我将该代码放入 WCF(见下文)并生成/安装时,它都不会返回任何内容。在 Windows 服务中承载我的 WCF 后,调用过程将不获取任何内容(我无法对其进行调试或单步执行)。所以我想知道,也许,WCF 不会返回文件流?

以下是服务:

<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 Settingsjspel903Desktop3211LD.pdf")
End Function
End Class

在我看来,它应该有效。有什么想法吗?

您可能希望将FileStream转换为字节数组并返回该数组。 WCF 通常仅限于返回可序列化的类型。

   // fs is your FileStream
   byte[] Data = new byte[fs.Length];
   fs.Read(Data,0,fs.Length);

这是行不通的...想想如果它这样做意味着什么。 WCF 客户端将有权访问服务器设备上的文件流。 它必须能够通过远程连接在本地执行所有操作。

WCF 是数据的传输机制,它实际上不会将对象引用发送到服务器的对象。 客户端获取对象的副本,该副本已由服务器序列化,然后在客户端反序列化。 如果可以发送流对象,则文件句柄/内存引用等对接收客户端没有任何意义。

您需要从服务器上的流中读取数据,然后将其转换为适当的数据对象以传输回客户端。

编辑:

显然,您可以将流式处理与 WCF 一起使用,但您将无法返回 System.IO.FileStream,您可以返回 Stream。

查看: 大数据和流式处理 有关描述以及采用该方法时需要注意的一些限制。

相关内容

  • 没有找到相关文章

最新更新