流式处理 WCF 数据服务响应

Posted

技术标签:

【中文标题】流式处理 WCF 数据服务响应【英文标题】:Streaming WCF DataService Response 【发布时间】:2011-08-26 16:28:12 【问题描述】:

我正在尝试流式传输我的 wcf 数据服务的响应,以使等待时间对用户更友好。响应为 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】:

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

您尝试执行的操作需要分块响应(用于 WCF 流式传输)。使用默认 WCF 功能集处理分块响应是您无法控制的。

【讨论】:

以上是关于流式处理 WCF 数据服务响应的主要内容,如果未能解决你的问题,请参考以下文章

带有身份验证的 WCF 流式处理

Dubbo3终极特性「流式协议体系」Dubbo3服务的流式处理和响应式编程实战开发指南

如何在node.js服务器流式http请求中处理JSON流响应数组

打造自己的ChatGPT:逐字打印的流式处理

WCF REST 服务流式传输 JSON 对象

wcf 服务错误请求 400 流式传输