问题标签 [pushstreamcontent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1039 浏览

c# - WebApi PushStreamContent 错误处理

使用Pushstreamcontent时处理错误的正确方法是什么?我使用Pushstreamcontent将数据直接从数据库流式传输到客户端。在客户端上,我在接收结果时使用HttpCompletionOption.ResponseHeadersRead

在数据不可用的情况下,我想返回一个 HttpStatusCode 404 (Not Found) 例如。目前我只检测到在执行 lambda ( CopyBinaryValueToResponseStream )期间没有数据。那时我无法再更改 HttpResponeMessage 的状态。

那么处理此类案件的正确方法是什么?我想避免预先对数据库进行额外检查,但现在这似乎是完成它的唯一方法?

0 投票
1 回答
8992 浏览

c# - asp.net 5 / mvc 6 中的 PushStreamContent 不起作用

我正在尝试将使用 PushStreamContent 的 web api 项目(经典 web.config 项目)迁移到最新的 asp.net 5 web 应用程序(project.json)。

我的问题是我无法让 PushStreamContent 工作。

当我使用这个 api 控制器时——结果将以 json 格式结束,而不是流:

如果我更改控制器操作以返回任务并将 PushStreamContent 包装在 MyPushStreamResult 类中 - 像这样:

对我的控制器操作的请求现在正在返回一个流,但该流在服务器端关闭或包含大量数据之前没有刷新。当我将数据推送到 PushStreamContent 输出流时,我会在每次写入文本后刷新,但我猜刷新不在 response.Body 流上。

我想念什么?找不到任何具有 asp.net 5 结构的示例。

0 投票
1 回答
538 浏览

c# - 将 PushStreamContent C# 代码转换为 VB.Net WebAPI 2 时出错

我在将此 C# 代码转换为 WebAPI 2 VB.Net 项目时遇到了一些困难。

这是原始的 C# 代码

这是 VB.Net 的翻译

我看到两个问题:

  1. 在此行上是“未为“公共函数 WriteToStream ...”的参数“上下文”指定的参数

    Dim func As Func(Of Stream, HttpContent, TransportContext, Task) = imageStream.WriteToStream

  2. 重载解析失败,因为无法使用这些参数调用可访问的“新建”

    response.Content = 新的 PushStreamContent(func)

我想我没有正确翻译这个,但我很难在 VB.Net 中找到我想要完成的任何示例。有人可以告诉我我做错了什么吗?

0 投票
1 回答
1481 浏览

asp.net - PushStreamContent 没有发送最终的零长度块来表示流的结束

我需要使用 Odata 协议通过 WebAPI 批量导出内容。我们正在尝试使用 PushStreamContent 将结果直接从数据库中流出。当我在本地 IIS 实例中运行该服务时,它运行良好,但是当我将它推送到服务器时,它会在最后 2 KB 上流式传输数据和暂停和“挂起”。

我通过跟踪文件大小来验证这一点。在本地运行时,我将得到一个 9094KB 的文件,当我将相同的代码部署到服务器时,我得到 9092KB,然后连接保持打开状态并停止传输。如果我杀死客户端并查看文件,我将看到流的 json 在写入过程中被切断。此外,我可以查看 IIS 中打开的连接,并看到该连接仍然处于活动状态。

无论如何,为什么 PushStreamContent 似乎只是停止发送数据而不关闭流?如果发生错误,则流和连接将关闭。

这是我的客户代码

更新

我一直在做广泛的测试,我认为正在发生的是流永远不会关闭(因此最后一个块永远不会发送过来)我通过将上面的数据迭代更改为这个得出了这个结论:

我看到发生的是它只会返回 600 个“行”。似乎又缺少 2 KB。然后我将循环更改为count <601并且整个流被传输,但流永远不会关闭。我认为正在发生的是内部缓冲区大小,如果在 4K 左右(这是打印出来的数字 0-600),并且由于流没有关闭,因此永远不会收到最后几个字节。这有意义吗?

无论如何,为什么流不会关闭?我在最后,我没有看到任何错误。

更新

我发现了更多信息。HTTP 1.1 规范说分块流需要以零长度块结束。经过一番挖掘,我发现它应该发生,但无论出于何种原因,它都不是。在我的客户端中,我删除了Connection: Keep-Alive标题并将其替换为Connection: Close我有同样的问题,但是一旦我强制关闭连接(通过关闭我的测试应用程序)最后几个字节写入磁盘,一切都很好。这就是我知道没有发送零长度块的方式。

所以现在问题变成了。为什么当我关闭流时没有发送最终的零长度块?根据我的阅读,调用HttpContext.Current.ApplicationInstance.CompleteRequest();应该强制请求结束并写出该块。我将其添加为 finally 块中的最后一行,并使用我知道它正在运行的调试器。但是,该块仍未设置。

请记住,所有这些都适用于托管在 IIS 中的我的开发机器,但不适用于 Web 服务器。

我的机器运行的是 Windows 10,我安装了 asp.net 5,以及所有默认设置的 IIS7。

Web 服务器是 Windows Server(我不确定版本)运行 IIS8 但它只安装了 asp.net 4.5。我最初的预感是这就是问题所在 - 不同版本的 asp.net 框架,但我检查了该项目仅针对 ASP.NET 4.5。我仍然会尝试更新服务器,但由于我的目标是 4.5,我认为它不会有任何好处。

0 投票
1 回答
703 浏览

connection-reset - net::ERR_CONNECTION_RESET PushStreamContent

我正在尝试使用 PushStreamContent 流式传输视频,但在视频开始播放几秒钟后,浏览器给了我一个 net::ERR_CONNECTION_RESET ( Error )

前端:使用标签调用 webapi 方法,该方法使用发送包含视频文件部分的缓冲区的操作

希望我能解释我的问题。

提前致谢。

0 投票
2 回答
301 浏览

asp.net-web-api2 - 当客户端终止连接时,完成端口线程正在泄漏

我有一个 ASP.NET WebApi 自托管应用程序。HttpSelfHostConfiguration配置如下

有一个动作接受 HTTP GET 请求如下

打开网址http://127.0.0.1:54781/,我看到了渐进式响应。

但是如果客户端在服务器发送响应时终止连接,完成端口线程被占用并且永远不会释放。

在此处输入图像描述

它能够通过耗尽完成端口线程池来关闭应用程序。

0 投票
0 回答
1008 浏览

asp.net-mvc - 使用 ASP.NET WebAPI 流式传输视频 - 视频搜索问题

我正在使用 PushStreamContent 以异步方式流式传输作为 BLOB 托管的视频。这是我到目前为止所做的

video.WriteToStream 只是读取文件并写入输出流。当我在这里关注这篇文章时,一切都很好。

这就是我使用 video.js 流式传输视频的方式

当我尝试向前拖动视频时遇到问题,它会重新启动视频。早些时候我有一个类似的问题,这是由于我在上传时错过了为块 blob 设置内容类型。我在这里又错过了什么吗?

0 投票
0 回答
81 浏览

c# - 涉及来自 SQL Server 存储过程的大型结果集的业务场景的可能设计模式

场景:我被赋予了一项任务,该任务涉及创建一个 Web API,该 API 将在 url 中采用日期参数,如下所示:

此 api 将调用一个存储过程,该过程使用 select 语句中 url 中的日期。然后,api 会将结果集作为 json 响应返回给调用应用程序,该应用程序不是面向前端的应用程序。

问题:返回从存储过程执行返回的结果集通常是没有问题的。但是,预计结果集可能会返回多达 350,000 条记录,每条记录大约 350 字节。

可能的设计方案?

我正在研究利用PushStreamContent该类并将数据推送到流中供客户端使用。

问题

在执行存储过程并使用 读取结果集DataReader后,我可以在逻辑中将每条记录推送到流吗?

就像是 :

这样做的正确方法是什么?是否可以只返回客户端的大型 json 对象而不必担心必须流式传输数据?我是否需要考虑使用存储过程进行分页,或者只一次检索所有记录,然后一次只将一个块流式传输到客户端?我很难理解解决这种情况的最佳方法是什么。

0 投票
0 回答
218 浏览

c# - 使用 PushContentStream 推送 zipFile 会导致 zip 文件加载而不是保存

我正在使用 ac# web api 控制器,我的代码应该在其中创建几个 word 文档并将它们压缩到一个 zip 文件中。我正在使用 Ionic.Zip 压缩文件并将其作为输入参数返回到下面的代码中。该代码应该将 zip 文件推送给用户进行下载,但它是在窗口中加载 zip 文件。

我正在使用以下代码:

但是当我运行它时,zip 文件会加载到窗口中,而不是提示保存文件。

这是我运行它时得到的:

关于我做错了什么或如何解决这个问题的任何想法?

非常感激。

0 投票
1 回答
224 浏览

c# - HttpResponse - 如何设置状态码取决于 PushStreamContent 执行结果

我使用类将数据写入http响应PushStreamContent。我需要检索适当的 HTTP 状态代码取决于onStreamAvailable委托执行的结果。这是一个示例代码:

上面的示例总是检索状态代码 200(Ok)。我该如何解决?