我有一个自定义流,我将它与 WCF 一起用于数据库中的大型 BLOB。它以块的形式读取数据。
处理流连接的最佳方法是什么?我应该在施工时打开它还是在每次读取卡盘时打开/关闭它?
谢谢。
我有一个自定义流,我将它与 WCF 一起用于数据库中的大型 BLOB。它以块的形式读取数据。
处理流连接的最佳方法是什么?我应该在施工时打开它还是在每次读取卡盘时打开/关闭它?
谢谢。
SQL Server 2008 中的 Filestream 会将文件保存在文件系统上,从而为您提供使用公共文件系统 API 的流式处理能力以及优于普通 BLOB 的性能。
从帖子 - 经验法则:
数据 > 256K - 考虑文件流
数据 < 256K - 继续使用 BLOB
我会将整个 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);
}
}