首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流式处理WCF DataService响应

流式处理WCF DataService响应
EN

Stack Overflow用户
提问于 2011-08-27 00:28:13
回答 1查看 581关注 0票数 0

我正在尝试流式传输我的wcf数据服务的响应,以使等待时间更加用户友好。响应是XML格式(我使用实体框架4.1),我有这些预定义的事件

代码语言:javascript
运行
复制
service.SendingRequest += service_SendingRequest;
service.ReadingEntity += service_ReadingEntity;
service.WritingEntity += service_WritingEntity;

之后,我调用DataServiceQuery Execute方法

代码语言:javascript
运行
复制
var items = myItems.Query.Execute();

下面是SendingRequest事件的主体

代码语言:javascript
运行
复制
        var response = (HttpWebResponse)e.Request.GetResponse();
        var resStream = response.GetResponseStream();

        var sb = new StringBuilder();
        var buf = new byte[1024];

        string tempString;
        int count;

        do
        {
            count = resStream.Read(buf, 0, buf.Length);

            if (count != 0)
            {
                tempString = Encoding.ASCII.GetString(buf, 0, count);
                sb.Append(tempString);
            }
        }
        while (count > 0);

所以问题是,在那之后什么都不会发生。下一个事件ReadingEntity不会触发。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2011-08-27 19:34:19

您不能更改服务发送请求的方式。该事件允许您修改请求标头,但服务必须自己调用它。您的代码很可能破坏了服务的功能。我也不认为你想要做的事情是可能的。WCF数据服务仍然在内部使用WCF,除非它使用流,否则它将始终等待整个消息,然后才会将其传递到您的上层(上下文)。WCF数据服务中的流式传输只有在实现streaming provider时才有可能,而且它主要用于下载二进制数据,而不是以块为单位下载公共数据。

您尝试做的事情将需要分块响应(在WCF流中使用)。对于默认的WCF功能集,处理分块响应不受您的控制。

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

https://stackoverflow.com/questions/7207793

复制
相关文章

相似问题

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