0

我有一个自定义流,我将它与 WCF 一起用于数据库中的大型 BLOB。它以块的形式读取数据。

处理流连接的最佳方法是什么?我应该在施工时打开它还是在每次读取卡盘时打开/关闭它?

谢谢。

4

2 回答 2

1

SQL Server 2008 中的 Filestream 会将文件保存在文件系统上,从而为您提供使用公共文件系统 API 的流式处理能力以及优于普通 BLOB 的性能。

从帖子 - 经验法则:

数据 > 256K - 考虑文件流
数据 < 256K - 继续使用 BLOB

于 2009-03-30T15:53:22.787 回答
0

我会将整个 blob 加载到内存流中,然后让 WCF 处理 Streaming 和 Chunking。您可以在 transportBindings 中启用流式传输,或查看使用 MTOM。

[ServiceContract]
public class ContentService
{
  [OperationContract]
  public Stream GetBlob(int id)
  {
    byte[] myBlob = GetBytesFromDatabase();
    return new MemoryStream(myBlob);
  }
}

如果您使用 SQL Server 2008,请尝试将流直接发送到 WCF 客户端

[ServiceContract]
public class ContentService
{
  [OperationContract]
  public Stream GetBlob(int id)
  {
    return GetStreamFromDatabase(id);
  }
}

请参阅有关使用 WCF 流式传输消息的链接

于 2009-03-30T16:05:44.817 回答