问题标签 [chunking]

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 回答
933 浏览

wcf - WCF 分块/流式传输 - 使其对客户端透明

在开发 WCF 服务时,我遇到了将大数据作为方法参数传输的问题(> 4 Mb 的原始大小,不考虑传输/消息开销)。

这个问题的解决方案是使用分块或流式传输,但我看到的所有示例都假设客户端知道使用的方法并使用可用的块大小来发送/接收部分数据,问题(对我来说)是它不可能只调用一种方法,比如

但是编写包装器方法,它会像迭代一样

它可以以某种方式对客户端透明,只需调用“SaveData”吗?

编辑:小的附加问题,虽然它可以去单独的问题如果我们使用 wcf 流,那么 ServiceContract 中的所有 ServiceOperations 必须满足附加限制,例如“流式传输中发生的操作最多可以与一个输入或输出参数签订合同” ?

如果服务只需要对部分方法进行流式处理,您需要将其移至另一个服务合同吗?有没有另一种方法来处理它?

谢谢

0 投票
1 回答
331 浏览

c# - 如何使用 Google API 版本 2 将 Chuck 中的 EML 数据迁移到 Google Apps Mail?

我正在将 EML 邮件迁移到 Google Apps。当我尝试迁移带有两个附件 2.1 MB 和 1.96 MB 的 EML 文件时。

它抛出异常:

“请求被中止:请求被取消。”

我正在使用以下代码:

我认为发送数据可以解决这个问题。那么,如何将这个 EML 数据分块发送到 Google Apps?

谢谢

0 投票
5 回答
14583 浏览

wcf - 在具有消息安全性的 WCF 中使用 wsHttp 传输大量数据(序列化对象)

我有一个案例,我需要使用 WCF 使用 wsHttp传输大量序列化对象图(通过NetDataContractSerializer )。我正在使用消息安全,并希望继续这样做。使用此设置,我想传输序列化的对象图,它有时可能接近 300MB 左右,但是当我尝试这样做时,我开始看到 System.InsufficientMemoryException 类型的异常出现。

经过一番研究,默认情况下,在 WCF 中,服务调用的结果似乎包含在默认情况下包含在单个消息中,该消息包含序列化数据,并且默认情况下此数据在服务器上缓冲,直到整个消息被完全写入。因此,由于该缓冲区已满,服务器正在耗尽允许分配的内存资源,从而导致内存异常。我遇到的两个主要建议是使用流式处理或分块来解决这个问题,但是我不清楚这涉及到什么,以及在我当前的设置(wsHttp/NetDataContractSerializer/Message Security)下这两种解决方案是否可行。到目前为止,我知道使用流式消息安全性是行不通的,因为消息加密和解密需要对整个数据集而不是部分消息起作用。然而,分块听起来可能是可能的,但我不清楚如何使用我列出的其他约束来完成。如果有人可以就可用的解决方案以及如何实施它提供一些指导,我将不胜感激。

我应该补充一点,就我而言,我真的不担心与其他客户端的互操作性,因为我们拥有并控制通信的每一端,并使用共享接口模式将数据传输到任一端。因此,我对任何符合使用带有消息安全性的 wsHttp 来传输使用 NetDataContractSerializer 序列化的对象图的限制的想法持开放态度,我更喜欢不需要大幅更改现有服务和周围基础设施的解决方案。

相关资源:

我也对可以对这些数据进行的任何类型的压缩感兴趣,但是一旦我可以转换到 .NET 4.0 以便客户端将自动支持 gzip,我可能最好在传输级别执行此操作标题,如果我理解正确的话。

更新(2010-06-29):

关于我如何得出缓冲消息太大导致我的问题的结论的一些历史。最初我在测试时看到了下面的CommunicationException

基础连接已关闭:连接意外关闭。

最终,在运行此程序并进行更多日志记录后,我发现导致指定消息出现问题的底层InsufficientMemoryException异常。

未能分配 268435456 字节的托管内存缓冲区。可用内存量可能很低。

这源于以下方法。

System.ServiceModel.Diagnostics.Utility.AllocateByteArray(Int32 大小)

所以换句话说,失败来自分配数组。将序列化的相同数据写入磁盘时,它占用大约 146MB,如果我将其减半,那么我将停止收到错误,但是我没有深入研究破坏缓冲区的特定阈值以及它是否特定于我的系统或不是。

更新(2010-12-06):

我想此时我正在为以下内容寻找一些澄清。我的理解是,默认情况下,具有消息安全性的 WCF wsHttp 在将响应发送回客户端之前需要在服务器上缓冲整条消息(通常是我返回的整组数据),从而导致我的问题。

可能的解决方案:

  • 限制数据大小 - 通过使用某种形式的压缩、编码或限制使用某种类似分页的方法返回的实际数据,以避免消耗传出缓冲区的最大容量。
  • 流式传输 - 允许通过 WCF 以流式传输方式发送大量数据,但这与 wsHttp 或 MessageSecurity 不兼容,因为这些技术需要缓冲所有数据。
  • 分块通道 - 允许将数据分解为单独的消息,但此时我不确定这对服务合同设计的限制,以及我是否仍然可以将 wsHttp 与消息绑定一起使用。

限制我可以返回的数据只能在一定程度上起作用,并且与 Streaming 选项一样,这些选项需要对 WCF 服务调用之外的许多较低级别的工作进行编码。所以我想我需要知道的是,分块通道的任何可能实现是否可以通过允许将一组数据分解为服务器上的单独消息,然后在客户端上拼凑在一起,从而避开大消息问题这样我就不必更改现有服务合同的接口/形状,并且该过程几乎对每个服务实现的客户端和服务器部分隐藏,同时仍使用消息安全性和 wsHttp。如果分块通道将要求我重写我的服务合同以公开流,那么我不会' 看不出这与 Streaming 解决方案有何不同。如果有人可以简单地为我回答这些问题,我将奖励他们并将其标记为答案。

0 投票
3 回答
3037 浏览

clojure - 对于我想短路的惰性序列,如何避免 Clojure 的分块行为?

我有一个长而懒惰的序列,我想减少和懒惰地测试。一旦两个顺序元素=(或其他谓词)彼此不存在,我就想停止使用该列表,因为该列表的生成成本很高。是的,这听起来像take-while,但请进一步阅读。

我想写一些像这样简单而优雅的东西(假装一分钟every?像这样reduce):

但这并不懒惰,因此它挂在无限序列上。我发现这几乎可以按我的意愿工作:

但是,我注意到序列分块会导致创建和测试额外的、不必要的元素。至少,我认为这就是以下代码中发生的情况:

我找到了一种解决方法,使用take-while, 并count检查所用元素的数量,但这相当麻烦。

我应该礼貌地向 Rich Hickey 建议他正确地进行一些组合reduceevery?短路,还是我错过了一些已经存在的明显方式?

编辑:两个好心人发布了避免在惰性序列上分块的解决方案,但是在执行 时如何避免分块apply,这似乎在四个一组的分块中消耗?

编辑#2:正如 Stuart Sierra 所指出的,我独立发现,这实际上并不是分块。只是申请正常行事,所以我会称之为关闭并给他答案。对于那些感兴趣的人,我在单独的答案中包含了一个小函数来解决问题的减少部分。

0 投票
1 回答
332 浏览

wcf - 是否有用于非双工 WCF 分块的库或示例?

我正在寻找一种通过 HTTPS 实现文件传输服务的方法,该服务使用分块来应对间歇性连接丢失并减少使用流式传输所需的大量超时。因为客户端可能在防火墙后面,所以 MSDN 上的Chunking Channel示例不适合。

微软论坛上有一个关于这个的旧讨论,但不是一个完整的答案,或者至少没有我知道如何实施的答案。

0 投票
2 回答
423 浏览

c# - 追加到 Informix BLOB 而不会耗尽内存

我正在编写 ac# 应用程序,它将大量(1GB+)数据插入到 informix 数据库中的 BLOB 中。

但是,很多时候文件太大,进程内存不足。我已经实现了 WCF 分块通道来缓解这种情况,但是我需要将这些块放入 BLOB 中,而不需要消耗内存来存储它们。

我如何才能在这些块进入时将它们附加到 blob,而不是先将它们全部缓冲在内存中?

蒂亚!

0 投票
1 回答
1059 浏览

wcf - WCF 分块是否已准备好用于生产?

有谁知道 WCF 分块的状态?是否适合生产使用?有没有人有在生产中使用新的 WCF 分块通道的经验? http://msdn.microsoft.com/en-us/library/aa717050.aspx

我已经下载了示例,但似乎 API 还没有准备好。

有没有人有 WCF 分块的任何好的替代方案?

0 投票
1 回答
17166 浏览

c# - 如何计算上传大文件的最佳块大小

是否存在处理大文件的最佳块大小之类的东西?我有一个上传服务 (WCF),用于接受数百兆字节的文件上传。

我已经尝试过 4KB、8KB 到 1MB 的块大小。更大的块大小有利于性能(更快的处理),但它是以内存为代价的。

那么,有没有办法在上传文件时计算出最佳的块大小。如何进行这样的计算?是否是可用内存和客户端、CPU 和网络带宽的组合决定了最佳大小?

干杯

编辑:可能应该提到客户端应用程序将处于silverlight。

0 投票
2 回答
1609 浏览

wcf - 从 WCF 到 ASP.NET 的回调可能吗?

我有一个托管在 IIS 中的不同盒子中的 Web 服务和托管在 Windows 服务中的 WCF 服务,在不同的盒子中。(N 层方法)。这里,Web 服务是 WCF 服务的客户端。上传文件的请求来自 IIS 托管的 Web 服务,该 IIS 托管的 Web 服务作为回报调用 WCF 服务并进行实际上传。到现在为止还挺好。上传完成后,WCF 服务执行回调(我已将回调存储在字典中,并且我使用过 (InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple))。WCF 服务发送回调。在跟踪查看器中,看起来 ASP.NET 收到了回调,但浏览器中的上传页面(这是最终用户)永远冻结了。我正在使用 larsw 的 ChunkingChannel 绑定。

首先,正如约翰桑德斯在此链接中提到的那样,是否有可能实现上述情景:

“OperationContext.Current.GetCallbackChannel”实际上是做什么的?

谢谢您的帮助。

0 投票
3 回答
2703 浏览

php - 使用 PHP 分块处理数组

我从我的 PHP 脚本连接到并在其上执行查询的数据库中获取了大约 500 行。对于返回的每一行,我以表格格式显示。脚本在 Firefox 中运行良好,最终在 IE 中运行,但在一切正常显示之前,用户会收到 1 或 2 次“停止运行此脚本”提示(并告诉 IE 继续..)。

为了解决这个问题,我需要将一些数据发送回浏览器——我认为最好的方法是分块/批量处理数组。PHP 有一个array_chunk函数,但我无法弄清楚如何在这里使用它。

要获取数据库行,我使用:

...然后将它们显示在表格中:

使用 array_chunk 处理我的数组的最佳方法是什么,比如以 50 个为一组?