首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF streaming SQLFileStream by Message Contract

WCF streaming SQLFileStream by Message Contract
EN

Stack Overflow用户
提问于 2013-05-03 07:33:18
回答 2查看 348关注 0票数 1

在我的WCF服务中,我尝试从具有FileStream列的MS SQL表中加载文件,并尝试将其作为流传递回来

代码语言:javascript
复制
        responseMsg.DocSqlFileStream = new MemoryStream();

        try
        {
            using (FileStreamDBEntities dbEntity = new FileStreamDBEntities())
            {
                ...
                using (TransactionScope x = new TransactionScope())
                {
                    string sqlCmdStr = "SELECT dcraDocFile.PathName() AS InternalPath, GET_FILESTREAM_TRANSACTION_CONTEXT() AS TransactionContext FROM dcraDocument WHERE dcraDocFileID={0}";
                    var docFileStreamInfo = dbEntity.Database.SqlQuery<DocFileStreamPath>(sqlCmdStr, new object[] { docEntity.dcraDocFileID.ToString() }).First();

                    SqlFileStream sqlFS = new SqlFileStream(docFileStreamInfo.InternalPath, docFileStreamInfo.TransactionContext, FileAccess.Read);
                    sqlFS.CopyTo(responseMsg.DocSqlFileStream);

                    if( responseMsg.DocSqlFileStream.Length > 0 )
                        responseMsg.DocSqlFileStream.Position = 0;

                    x.Complete();
                }
            }
            ...

我想知道通过消息协定传回SQLFileStream以利用流的最好方法是什么。目前,我将SQLFilEStream复制到内存流中,因为我在WCF跟踪中收到一条错误消息:类型'System.Data.SqlTypes.SqlFileStream‘无法序列化。

EN

回答 2

Stack Overflow用户

发布于 2013-07-03 00:54:13

在WebApi中有PushStreamContent这样的东西,它允许将所有事务委托给异步lambda,不知道在WCF中是否有类似的东西,但以下方法可能会有所帮助:

http://weblogs.asp.net/andresv/archive/2012/12/12/asynchronous-streaming-in-asp-net-webapi.aspx

票数 0
EN

Stack Overflow用户

发布于 2013-05-03 16:48:40

您不能将SQLFileStream流式传输回客户端,因为它只能在SQL事务中读取。我认为你的MemoryStream解决方案是处理这个问题的好方法。

我也有类似的问题,每次使用新的内存流时,我都担心大对象堆。我想到了使用磁盘上的临时文件而不是内存流的想法。我们现在在几个项目中使用了这个解决方案,它工作得非常好。

示例代码请参见此处:https://stackoverflow.com/a/11307324/173711

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16349414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档