流式WCF DataService响应

时间:2011-08-26 16:28:13

标签: c# wcf entity-framework entity-framework-4.1 wcf-data-services

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

service.SendingRequest += service_SendingRequest;
service.ReadingEntity += service_ReadingEntity;
service.WritingEntity += service_WritingEntity;

之后我调用DataServiceQuery Execute方法

var items = myItems.Query.Execute();

这是SendingRequest事件的主体

        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没有解雇。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

您要做的是需要分块响应(在WCF流中使用)。使用默认WCF功能集处理分块响应时,您无法控制。